본문 바로가기
게시판 만들기

게시판 DB 스키마 정리

by ethanjoh 2009. 2. 12.
2009/02/07 - [잡담] - 추천서적 : 성공적인 웹 프로그래밍 PHP와 MySQL (제3판)

"성공적인 웹 프로그래밍 PHP와 MySQL" 이라는 책을 읽고 난 뒤 DB의 스키마를 정리해 보았다.
(읽을 수록 괜챦은 책이란 생각이 든다.)

board (code, main_no, id, title, name, contents, passwd, date, count, email, reply_no, rel_no, depth, filename)

code (num, code, bbs_name, passwd, readonly)

굵은체로 표시된 것이 primary key고, code 테이블에 이탤릭체로 표시된 code 는 board 테이블을 참조하는 foreign key다.

맨 처음 게시판을 만들 때와는 조금 달라졌다.
현재 테스트 중인 게시판에는 관리자 페이지와 게시판별 구분을 위한 code 테이블이 추가되어 있다.

뭐 훌륭한 테이블 설계라고는 결코 말할 수 없지만, 그럭저럭 쓸만은 한 것 같다.
(좀 더 잘 설계를 한다면 답글용 테이블도 별도로 만드는 것이 좋을 것 같다.)

그럼 실제 테이블을 만들면, (bbs.sql의 내용이다.)

CREATE TABLE IF NOT EXISTS board ( 
 code varchar(20) NOT NULL,
 main_no int(11) unsigned NOT NULL AUTO_INCREMENT,
 id varchar(11) NOT NULL,
 title varchar(30) NOT NULL,
 name varchar(20) NOT NULL,
 content mediumtext,
 passwd varchar(41),
 date datetime, 
 count int(10) unsigned NOT NULL default '0',  
 email  varchar(40),
 reply_no int(11) unsigned NOT NULL, 
 rel_no int(11) unsigned NOT NULL, 
 depth int(3) unsigned NOT NULL default '0',
 filename varchar(255),
 PRIMARY KEY (code, main_no)
)TYPE=MyISAM,CHARSET=utf8;

CREATE TABLE IF NOT EXISTS code (
 num int(10) unsigned NOT NULL auto_increment,
 code varchar(20) NOT NULL,
 bbs_name varchar(50) NOT NULL,
 passwd varchar(11) NOT NULL,
 readonly enum('Y', 'N') NOT NULL default 'N',
 PRIMARY KEY (num)
)TYPE=MyISAM,CHARSET=utf8;
unsigned 는 양수로만 저장된다는 것을 말한다.

board의 passwd 필드는 회원관리와 관련이 있다.
회원이 로그인하고 글을 쓰게 되면 각 회원의 로그인 비밀번호가 자동으로 들어가게끔 했다. (귀챦아서리...)
수정할 때는 본인의 글이 아닌 경우에는 못하게끔 처리했고, 삭제할 때만 비밀번호를 묻는다.

code 테이블의 passwd는 관리자가 접근하기 위한 게시판 관리용 비밀번호다.
관리자로 로그인했을 때는 모든 글의 삭제가 가능하다. (수정은 못하게 했다.)
readonly 필드는 관리자 전용인지 일반회원들도 쓸 수 있는지를 구분한다.

사실 NOT NULL과 NULL이 헷갈렸는데, 데이터가 반드시 들어가고 안들어가고의 차이라고 생각하면 될 것 같다.

데이터형 중에서 varchar와 char의 차이점은 말 그대로 데이터 길이가 가변적인지 고정적인지의 차이이다.
varchar가 데이터 크기에 따라 가변적으로 사이즈가 변하기 때문에 용량을 적게 차지하지만, char에 비해서는 느리다고 한다.

따라서, 데이터 사이즈가 정해져 있는 필드라면 char를 쓰는게 좋다.

그리고 여기서 문자셋은 utf-8이다.
기존 euc-kr에서는 한글이 2바이트를 차지하는데 반해 utf-8에서는 한 글자가 그냥 글자수 하나를 차지한다고 한다. 여기에 맞춰 varchar 크기를 정하면 될 것 같다.

MyISAM은 DB 기본형이란다.

위의 소스를 bbs.sql 같은 이름으로 저장한 뒤, phpmyadmin 툴의 import 메뉴에서 utf-8로 두고 불러오면 간편하게 테이블이 생성된다.