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
운영게시판
최근게시물
MySQL Q&A 29648 게시물 읽기
No. 29648
테이블 생성 할 때...
작성자
엄승열(eosliebe)
작성일
2010-05-11 13:19ⓒ
2010-05-11 13:19ⓜ
조회수
7,142

DB에 자료를 저장 할 때...
하나의 칼럼에 함축적으로 하는게 나을까요? 아니면 여러개로 나누는게 편할까요?

예를 들어 설명드리자면...
2001년도(01) / 여름(S) / 수학(M) / 1차과정(1) 이라고 한다면...

year / season / major / step
이렇게 4개의 필드를 생성하는게 좋은가요?

program 이라는 1개의 필드만 생성하여
01 / S / M / 1 이런식으로 .. 01SM1 이란 값이 입력되게 하는게 나을까요?

그동안은 4개의 필드를 생성했는데...
굳이 그렇게 할 필요가 있나? 라는 생각이 들더군요...

자료 출력시에도...
$array[year] / $array[season] / $array[major] / $array[step] 이렇게 4개지만...
1개로 통합하게 된다면...
$array[program] 값을 substr로 텍스트를 구분 한 후 표기하면 될텐데... 라는 것이 제 생각입니다.

4개의 필드 vs 1개의 필드.. 어느게 더 효율적일까요?
(참고로 테이블 자료의 양은 500개 미만이며, 검색기능을 별도로 달지 않을 예정입니다.)



고귀한 가르침 부탁드립니다 (__)

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

정규화냐 비정규화는 case-by-case지, 정답이 없다고 보는 것이 옳을 것 같습니다.

대부분 작업자의 스킬 특성과 데이터 크기에 따른 가용성을 두고 결정을 내리게 되는데요, 글 쓰신 분께서는 SQL보다는 PHP에 더 익숙한 작업자로 보입니다. 따라서, 500건 미만의 데이터에 대해서는 굳이 정규화가 필요치 않겠습니다. 따라서 두번째 경우로 사용해도 무방하겠지요.

 

다만, 저라면 첫번째 경우를 선택하겠습니다. 정규화된 데이터를 비정규화 하는 쪽이 비용이 덜 들기 때문입니다.

 

박현우(lqez)님이 2010-05-11 16:22에 작성한 댓글입니다.

안녕하세요 박성원입니다.

 

저도 현우님말씀처럼 첫번째를 추천드립니다.

500건 미만의 데이터가 문제가 아니라 우선 말씀하신것처럼 String을 가져와서 짤라서 사용하면 됩니다만, 여러가지 문제에 직면할 수 있지요

 

예를들면 연도표기에서 1900년도와 2000도의 구분과 이수과정의 10자리의 확장 과목의 중복 등의 사유로 인해 program 필드의 표준에 어긋날 수 있습니다.

 

또한, 이러한 방식의 문제점은 비단 이것 뿐만이 아닙니다. 검색 기능이 없다 하더라도 삭제나 업데이트 등의 사유로 인한 데이터 조회가 어렵습니다. 이런 식의 디자인은 향후에 개발할 여러가지 Table에도 지장을 줄 수 있기 때문에 정상적인 Table을 만드시는 것을 추천드립니다.

 

DATABASE는 어떠한 경우에 어떻게 발생할 상황을 예상하며 작성하는것이 좋습니다. 현재 단순히 이것이 편하다고 해서 그렇게 했을경우 나중에 바꿀려면 바꿀 수 없을 뿐더러 APP에 모든 코드를 수정하는 경우가 발생 할 수 있습니다.

 

단순한 App의 개발의 편의를 위해 DATABASE를 고치는것은 매우 안좋은 습관이며, 성능의 이슈를 발생 시킬 수 있습니다. 일예로 초기 개발 단계에서 DATABASE를 생각하지 않고 편의상으로 테이블을 작성했을 경우 2차적인 문제로 인해 코딩의 제약이 발생 할 수 있습니다. 그때그때 Table을 수정하며 정규화를 적용했을 경우 작업 시간이 매우 길어 질 수 있습니다. ^^

 

 

그럼 건승하시길

박성원(darkancia)님이 2010-05-12 11:20에 작성한 댓글입니다.
이 댓글은 2010-05-12 11:21에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
29651select 문에 공식을 재사용 할 수 있나요. [2]
송기창
2010-05-13
7403
29650mysql restart 경우 [1]
김현호
2010-05-12
7040
29649달력에서 날짜를 클릭하면 text박스로 전달하게 하는방법좀알려주세요 [4]
윤은숙
2010-05-11
8838
29648테이블 생성 할 때... [2]
엄승열
2010-05-11
7142
29647테이블 합쳐서 새로운 테이블 만드는방법좀 알려주세요 ㅜㅜ [1]
김봉주
2010-05-10
7229
29641mysql에서 대용량의 insert와 select 처리 방법 [1]
김갑열
2010-05-07
7680
29640순번을 매기고 싶습니다.. [3]
양선생
2010-05-07
7094
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다