테이블 설계 시 NULL에 대하여 조언을 듣고 싶습니다~! 0 1 984

by 재팬종쿤 [DB 모델링/설계] MySQL Table Null [2018.07.05 12:33:23]



안녕하세요!

웹 프로그래머로 일을 하다가 최근에 데이터베이스 쪽을 만지고 있는 개발자 입니다.

사용하고 있는 데이터베이스는 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컬럼 집합 테이블을 따로따로 만들어서 관리하는 건 더더욱 아닌 것 같고요...

 

위와 같은 경우 어떻게 하는 게 좋을 지 의견을 듣고 싶습니다!

by 우리집아찌 [2018.07.05 16:04:55]

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

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입