안녕하세요!
웹 프로그래머로 일을 하다가 최근에 데이터베이스 쪽을 만지고 있는 개발자 입니다.
사용하고 있는 데이터베이스는 MySQL이며, 버전은 5.6입니다.
디비를 설계하는 데 있어서 NULL에 대하여 고민이 있어서 정보를 얻고자 글을 올리게 되었습니다.
예를 들면...
유저가 글을 작성할 수 있습니다.
글을 작성할 때 많은 항목(이름, 나이, 성별, 취미, 참가횟수 등)을 기입할 수 있습니다.
이름과 나이만 필수항목이며
성별, 취미, 참가횟수등은 기입을 안해도 글을 작성할 수 있습니다.
글을 작성한 후, 기입하지 않았던 항목을 편집으로 나중에 추가할 수 있습니다.
이 경우 제가 생각하고 있는 케이스는 2가지 입니다.
1. 하나의 테이블에 모든 컬럼을 관리하고, 기입하지 않으면 Null을 저장한다.
+-------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(45) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| hobby | varchar(45) | YES | | NULL | |
| count | int(10) unsigned | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
+-------+---------------------+------+-----+---------+----------------+
2. 필수항목 테이블과 Null이 들어갈 수 있는 테이블을 나눈다.
*첨부 파일을 확인해주세요!
(type컬럼을 이용해서 어떤 항목의 값인지 구분하고 있습니다)
고민을 하고 있는 이유는...
해당 테이블의 양은 어마어마하게 크기 때문입니다.
1번의 경우는 Null을 저장 후 나중에 업데이트가 되면 체인이 발생.
2번의 경우는 컬럼의 타입을 효율적으로 사용할 수 없고, 조인 발생.
integer 컬럼인 지 string 컬럼인 지 구분할 수 없기 때문에 모두 string으로 저장.
용량상으로 좋지 못한다고 생각합니다.
그렇다고 integer컬럼 집합 테이블, string컬럼 집합 테이블을 따로따로 만들어서 관리하는 건 더더욱 아닌 것 같고요...
위와 같은 경우 어떻게 하는 게 좋을 지 의견을 듣고 싶습니다!
3번째 방법으로
CREATE TABLE ARTICLE_SUB (
ARTICLE_ID INT
,HOBBY varchar(45)
,COUNT INT
,SEX VARCHAR(2)
)
도 있을수있습니다.
CHAR는 가능하면 VARCHAR 로 사용하세요.
참고하세요 .http://wiki.gurubee.net/pages/viewpage.action?pageId=27427186