database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 7199 게시물 읽기
No. 7199
자료형에 관한 조언을 구합니다 (enum , set )
작성자
유용빈(supermania)
작성일
2007-08-15 02:44ⓒ
2007-08-15 04:06ⓜ
조회수
7,347

안녕하세요? 예전부터 빠르고 안정적으로 운영되는 DSN을 보고 postgresql에 관심을 가져오다가 얼마전부터 테스트를 시작한 사용자 입니다.


현재 mysql 5.0을 가지고 작읍 웹개발 프로젝트를 진행중인데 처리양이나 동시사용등 보다는 data의 무결성이 상당히 중요한 프로젝트이다 보니 mysql 에서 제공하는 낮은수준의 consistant로는 한계와 염증을 느끼고 있는중입니다 (sql_mode부분에서 경악을 해버렸습니다 OTL) 그래서 다음 버전이나 다다음 버전 정도 postgresql 을 이용해서 개발을 해볼 생각이 있는데 가장 큰 걸림돌은 지금 현재 프로젝트에서 mysql 의 enum 과 set 자료형 의 비중이 상당히 크다는 점입니다.


물론 enum 같은경우 text column에 check 제약조건, set의 경우 bit string type으로 메칭 시킬수 있겠지만 각각 한계가 존재합니다.


구체적으로 예를 들자면 enum 타입의 경우 check 제약조건을 사용해서 저장하면 enum 과 동일하게 저장은 할수 있지만 mysql enum 처럼 enum index를 통한 처리 (enum('a','b','c')의 컬럼의 경우 a->1,b->2,c->3 의 enum index 에 각각 메칭되어 insert , select 시에 enum index를 통한 질의가 가능합니다 ) 가 불가능 합니다. 둘째 set 자료형 -> bit string type 의 경우는 상태를 bit string에 저장할수 있겠지만 '상태의 내용'은 유실되기 때문에 별도 참조 테이블을 만들던가 application logic쪽에서 참조 정보를 가져야 하는 문제가 발생합니다 (이는 enum을 bit string으로 처리했을때도 동일합니다 )


개인적으로 mysql 의 enum 과 set 자료형이 올바른 DB 설계나 데이터 모델링에 부합하지 않는 면은 있겠지만 실용적인 측면에서는 상당히 유용한 형태ㅤㄹㅢㅤ data type이라고 생각합니다 (특히 web 개발 환경에서 enum 과 set 자료형은 radio와 check box input object 와 완벅하게 match가 됩니다)  ( 아울러 mysql 에서 set 자료형의 활용에 대해서는 http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html 이 문서에 잘 소개가 되어있습니다 )


오늘 벼르고 벼르던 FreeBSD 서버에 postgresql 8.2.4를 설치하고 (이것때문에 커널껌파일까지;;;) 공식 document를 거의 다 독파하며 조금씩 테스트를 해봤는데 하면 할수록 더이상 mysql을 사용할 이유가 전혀 없다는 확신이 들고 있는데 마지막으로 걸리는문제가 이 두 자료형에 대한 문제입니다.


비슷한 형태의 질문이 이전에 올라와있는것은 봤는데 단순한 1차적인 답변밖에 없어 혹시 저랑 비슷한 고민을 하셔서 답을 찾은 분이 계신지 해서 이렇게 질문 남겨봅니다. 얼마전 8.2.4 릴리즈 뉴스에 덧글을 보니 8.3에서는 enum data type이 지원이 될 예정이라고 하던데 8.3에서 지원되는 enum type이 mysql의 그것과 비슷하게 동작(enum index 측면에서) 하는지도 궁금합니다.



감사합니다.


ps. 질문을 올리고 생각이 나서 구글링을 해보니 8.3에 추가될 enum data type에 대한 문서가 벌써 나와있더군요 !! http://developer.postgresql.org/pgdocs/postgres/datatype-enum.html#AEN5348 (질좋은 공식문서 역시 postgresql의 큰 매력인것 같습니다) 살펴보니 일단 컨셉은 일반적인 enum과 동일한것 같고 (저장은 bit로 하고 해당 bit에 대한 참조테이블을 가지고 있는 형태의 data type) ordering 부분을 봤을때 index를 통한 연산도 가능한것으로 보이는데 ( >, < 같은 연산자가 동작한 부분을 봤을때) 혹시 8.3을 직접 사용중이신분 계시다면 확인부탁드리겠습니다!!


ps2. 그리고 postgresql enum 으로 구글링해서 나올 결과의 top page 문서들은 대부분 ㅤㅎㅜㅀ어봤는데 제가 원하는 답은 없는것 같습니다 그나마 가장 근접한 접근이 oreily에 올라와있는 http://www.oreillynet.com/pub/a/databases/2006/01/06/enumerated-fields-in-postgresql.html 인데 여기서 제시하는 2번째 해결방법 ( enum filed에 대한 참조 테이블을 생성하고 foreign key 제약조건을 사용) 같은 경우 가장 교과서 적이고 모델링상으로도 깔끔한 해결책이 될수 있겠지만 문제는 현재 프로젝트에서 enum 으로 정의된 컬럼이 줄잡아 200개는 넘는 상황이라서 (boolean type으로 대체할수 있는 'YES','NO' 를 제외하더라도 100개이상) 이모든 케이스에 대해 참조테이블을 생성하고 관리하는것은 현실적으로 어려움이 있어보입니다.


ps3. 점점 자문 자답화 되어가고 있습니다만 ;; 저에겐 꽤 흥미로운 주제라 이시간까지 계속 자료를 찾아보고 있습니다 @_@ mailling list 를 뒤져보니 enums patch 라는 patch 와 함께 enum type에 대한 논의가 있었던 모양입니다 http://archives.postgresql.org/pgsql-patches/2006-12/msg00099.php , http://archives.postgresql.org/pgsql-patches/2006-12/msg00114.php 특히 두번째 스레드는 enum 타입의 불필요성에 대해 지적한 내용에 대한 반박으로 enum patch의 제작자가


Well, there are a number of cases where ordering IS important, and indeed, enums provide a way to do it easily where many of the alternative solutions do not. It's one of the key benefits.


이런 답변을 달았는데 절대적으로 공감하는 부분입니다 ;; 이 patch가 반영된것인지는 모르겠지만 pgfoundry에는 8.3부터 네이티브로 지원될 enum 자료형을 8.0 이상에서 사용할 수 있는 enumkit 이라는 프로젝트가 존재합니다 http://pgfoundry.org/projects/enumkit/ 드디어 직접 테스트 해볼수 있는 길이 열린것 같아서 확인해본 결과 간단하게 지금 DB에 적용할수 있어서 진행을 해봤는데 (patch 하고 postgresql전체를 재컴파일 해야할 줄 알았는데 이 부분 역시 상당히 흥미로운 부분이었습니다 ) 일단 제 머신에서는


"Makefile", line 23: Could not find

make: fatal errors encountered -- cannot continue


확인결과 PGXS 관련해서 뭔가 문제가 있어서 compile이 진행이 되지 않는것 같습니다 (PGXS가 뭔지 전혀 몰라서 진행을 못하고 있습니다) 아울러 enum type에 대한 design 과 proposal 을 정리한 스레드도 있었는데 http://archives.postgresql.org/pgsql-hackers/2006-08/msg00979.php 메일링리스트를 계속 구독한게 아니라 오늘 검색으로 찾아낸것들이라 어떤식으로 논의가 진행되었는지는 잘 모르겠습니다. 점점 질문인지 잡담인지 정체를 알수 없는 글입니다 ;;

이 글에 대한 댓글이 총 2건 있습니다.

왜 굳이 PostgreSQL 을 쓸려고 하시는지..

오라클도 무료버전이 있는데...

초보대왕님이 2007-08-15 19:53에 작성한 댓글입니다. Edit

오라클 무료버전의 경우 (합법적으로는 ) 300M 의 용량제한이 있는것으로 알고 있습니다. 그리고 오라클도 제가 알기로는 ENUM,SET타입은 존재하지 않고 postgresql처럼 enum 타입이 추가될 예정도 제가아는한 없기때문에 질문 내용과 연관해서 생각해보면 더 안좋은 선택이라고 여겨집니다 그리고 현실적인 여건이 된다면 믿을만한 OSS 리소스를 최대한 활용하는것을 원하고 또 그 자체를 (보시다시피 ^^ ) 즐기는 편입니다.

유용빈(supermania)님이 2007-08-15 20:32에 작성한 댓글입니다.
이 댓글은 2007-08-15 20:51에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
7204트리거만드는 법것 좀도와 주세요 [2]
김선우
2007-08-22
5360
7203꼭 도와주십시오.(__) [3]
손님
2007-08-21
5712
7201사용자패스워드를 잊었을때 postgres권한으로 알아내는 방법이 있는지요! [1]
김승일
2007-08-20
5278
7199자료형에 관한 조언을 구합니다 (enum , set ) [2]
유용빈
2007-08-15
7347
7198배열 검색 좀 더 효율적인 방법은 없을까요?
tyro
2007-08-10
5193
7197db내에 테이블을 보는 방법 [1]
김선우
2007-08-10
5465
7196returning 질문입니다. [1]
궁금이
2007-08-10
5646
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다