그누보드 DB 구조에서 foreign key를 mb_id로 하는 특별한 이유가 있을까요 ?
본문
안녕하세요?
개발을 배우고 있는 학생입니다!
그누보드를 통해 사이트를 개발하다가 갑자기 궁금한 것이 생겨서 문의드립니다.
그누보드의 DB 구조를 보시면,
g5_board_good,
g5_scrap,
g5_write_게시판들..
g5_point
등등 모든 테이블에서 mb_id를 foreign key로 하여 g5_member와 join하도록 되어 있습니다.
실제 g5_member의 primary key는 mb_no 이고,
또 g5_write_게시판들.. 등등 모든 테이블에서 mb_id를 저장하는 것 보다
mb_no를 저장하는 것이 더 효율적이라고 생각이 돼서요..
결국 궁금한 것은, 각 테이블에서 mb_no 말고 mb_id를 저장하는 특별한 이유가 있나 해서요..
혹시 특별한 이유가 있는지 궁금하여 여쭤봅니다!!
답변 5
mb_id를 foreign key로 하여 g5_member와 join하도록 되어 있습니다
<---그렇지 않습니다 위에 나열한 테이블들은 전혀 회원테이블을 조인하지않습니다
(join을 사용하는 테이블은 메모테이블, 접속자 테이블 등 극히 일부 입니다)
join을 사용해서 좋을 것이 별로 없을테니 되도록이면 join을 사용하지않는 방법으로
mb_id를 기록하는 것이 아닌가 싶습니다
게시판의 경우를 생각해보면 mb_no를 기록해서 아이디를 찾아오는 것보다 그냥 아이디 및 이름을 게시물 마다 기록해 두는 것이 더 효율적으로 보입니다만...
mb_no 은 단순히 기본키로서의 역할을 하고
실제로 사용되어지는 값이 mb_id이기 때문이 아닐까요
보통 다른 DB는 number를 index해서 찾아오는 구조가 많은데..
그누보드는 아이디를 직접 index하는 구조입니다.
좋은점은 DB를 보고 있으면 바로 알수 있다는 거죠..
테이블 안에 아이디(mb_id) 패스워드(wr_password), 별명(wr_name)등이 직접 들어가 있으니..
처리하기에는 편한것 같습니다. (이해하기도 편하고..)
단점은 글쎄요.. 옛날 같으면 선배한테 맞아 죽었을 것 같습니다.
DB 의 relation 에서는 기본적으로 위의 외래키를 따로 기입하지 않아도 자동 기입됩니다...
자동 기입된다는 의미가 무엇이라면..
어떠한 행위를 위해 insert 를 시도 할 때 각 테이블마다 해당 아이디를 입력하는게 아니라
하나의 아이디를 가지고 다수를 입력 할 수 있습니다.
바꿔말해 참조키 = 외래키 를 통하여 각각의 테이블을 연결하여 사용할 수 있다는 겁니다.
참조키는 NULL 일 수 있지만 기본키는 NULL 이면 안되지요.
이게 가장 큰 부분입니다.
역시 DB구조는 어려운 것 같습니다. 별것 아닌것 같지만. (노래 썸처럼) 어떤 구조로 만드느냐가 가장 중요한 것 같습니다. 워드프레스나 드루팔8 같은 구조도 있고, 그누보드 구조도 있고..