가변 컬럼의 구현 어떻게 하는 것이 좋을까요? (테이블의 컬럼의 수가 미리 정하기 어려울 경우)

2,556 views
Skip to first unread message

urstory

unread,
Jan 1, 2012, 1:00:37 AM1/1/12
to Korea Spring User Group
MySQL에 대하여 잘아는분 (MySQL이랑은 상관없고 db에 대한 질문일듯) 도움좀.
테이블이 있고, 이 테이블의 기본정보는 컬럼으로 선언할 수 있는데, 아직 정해지지 않은 정보는 미리 컬럼을 가지지 않게 하고 싶
습니다. 즉, 가변적으로 컬럼을 가지게 하고 싶다는 것이지요. 그렇게 되면, 추가적인 가변 컬럼에 대한 별도의 테이블이 유지가
되어야 할텐데 문제는 이와 같을 경우 성능이 떨어질 수밖에 없다는 것입니다.

이런 비슷한 문제를 해결하기 위하여 고민해 보신분들중에서 어떤 방식으로 해결했는지 궁금합니다. 경우에 따라서 달라질수 있겠는데
요.

1. 별도의 컬럼정보를 가지는 테이블을 만들어서 조인한다. (이때 컬럼의 메타정보를 가지는 테이블도 필요하다.)
2. 하나의 테이블에 앞으로 추가될 컬럼을 미리 선언해 둔다. (즉 현재는 사용하지 않지만, 미래에 사용하게 될 컬럼을 미라 많
이 선언한다. 역시 이때도 메타정보를 가지는 테이블은 필요하다.)

3. 1,2이외에 이런 멋진 방법이 있다! (전...1,2 외에는 모르겠습니다.)

새해 첫날부터 질문이라니..... 혹시 좋은 아이디어 있으분 답글좀.


새해 복많이 받으세요!

박용권

unread,
Jan 1, 2012, 9:55:37 AM1/1/12
to ks...@googlegroups.com
조금 뜬금없는 답변일수도 있지만...

스키마가 없는 MongoDB는 어떨까요?

2012년 1월 1일 오후 3:00, urstory <urs...@gmail.com>님의 말:

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


Sewon Ann

unread,
Jan 1, 2012, 10:13:47 AM1/1/12
to ks...@googlegroups.com
3. 컬럼에 json 이나 xml 등으로 데이터를 저장한다. 컬럼의 data type은 clob 이 되어야 겠지요.

라는 방법도 가능하긴 합니다만 이는 sql antipattern이므로 피해하는 게 좋겠지요.

아니면 table에 그 때 그 때 column을 추가하는 방법도 가능할 듯 한데요. (이건 운영상 문제가 발생할 수도)


위 링크에서 entity-attribute-value 섹션을 참고하시면 도움이 되지 않을까 생각합니다. 이 자료에서 얘기하는 건 결국 추가 데이터를 갖는 테이블을 만들라는 것이군요.



2012/1/1 박용권 <araw...@gmail.com>

sungchul park

unread,
Jan 1, 2012, 7:43:06 PM1/1/12
to ks...@googlegroups.com
안세원님의 아이디어와 유사한, XPath를 사용하는 방법도 있을 것 같습니다.

http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html

다만 제가 MySQL을 멀리하며 지낸 시간이 길어 성능이 어떤지, XPath 연산 결과에 인덱스를 걸 수 있는지는 모르겠네요.

XML 타입 컬럼을 지원하는 것도 그렇고 테이블 상속을 지원하는 것도 그렇고 DB만 본다면 역시 PostgreSQL이 좋습니다. 헤헤

저라면 2번 방법을 사용할 것 같고, 그 다음으로는 Alter table 명령을 사용해서 컬럼을 동적으로 추가 삭제하는 방법을 쓸 것 같습니다. 컬럼을 Null로 지정하면 기존에 데이터가 많이 있어도 새로 컬럼을 추가하는데 부하를 주지 않아서 MonghDB 같은 스키마리스 DB의 효과를 어느 정도 누릴 수 있습니다.


2012년 1월 2일 오전 12:13, Sewon Ann <kin...@gmail.com>님의 말:

임은철

unread,
Jan 3, 2012, 8:24:26 PM1/3/12
to ks...@googlegroups.com
그나마 2번이 좋을듯 합니다.
왜냐하면 현재는 사용안할  컬럼 50개를 만든다면 전부 null로 들어갈 것이고
순차적이면 1 byte로 50개 컬럼 null인걸 처리할 수 있습니다. 한마디로 null인걸 한꺼번에 뒤로 몰아야 합니다.
 
하지만 님이 제시한 모든 방법은 사용 안하는게 좋을듯 합니다.
미래에 컬럼을 추가하고자 할때 모델링 관점에서 먼저 분석하고 그 다음에 추가하여도 될듯해요.
그리고 "아직 정해지지 않는....." ==> 이 말은 업무 분석이 아직 안됐다는 말씀인가요??

2012년 1월 1일 오후 3:00, urstory <urs...@gmail.com>님의 말:
MySQL에 대하여 잘아는분 (MySQL이랑은 상관없고 db에 대한 질문일듯) 도움좀.
Reply all
Reply to author
Forward
0 new messages