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
운영게시판
최근게시물
DBMS Tutorials 136 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 136
DB 테이블 디자인에 도전하기 (1)
작성자
정재익(advance)
작성일
2001-12-07 13:04
조회수
11,249

테이블 디자인시 고려사항

 

============================================

원본출처 : http://korea.internet.com/channel/content.asp?nid=13845&cid=113#start

이글은 SQL 서버에서의 설정사항을 기준으로 설명되어 있으며, 여러분들은 이글을 그대로 적용해 보길 원한다면 SQL 서버가 설치된 상황에서 해봐야 합니다.

============================================

 

테이블 디자인을 시도할 때 가장 고민이 되는 부분은 자신이 하는 디자인이 정석인지 아닌지 불안해 하는 경우이다.

이제부터 이 고민에 대한 해답을 조금이나마 해결해 보도록 하자.

 

테이블을 가장 효율적으로 만드는 방법은 제한 사항과 추가 구성 요소를 포함하여 테이블에서 필요한 모든 것을 한 번에 정의하는 것이다.

그러나 실질적으로 이러한 테이블 디자인은 거의 불가능하다. 아무리 경우의 수를 많이 생각하고 프로세스를 이해하고 설계한다고 하더라도 이건 이상이라고 필자는 생각한다.

 

    . 우선 운영이 가능할 정도의 기본테이블을 만든다.
    . 모니터링을 통해서 어떤 유형의 트랜잭션이 가장 많고 어떤 유형의 데이터가 
      자주 입력되는지 파악한다.
    . 제약 조건, 인덱스, 기본값, 규칙 등과 같은 개체를 추가하여 계속적인 모니터링을 
      하고 테이블 디자인을 결정한다.
    . 모니터링을 통해서 변화되는 테이블 디자인은 테이블 정의서에 기록한다.

테이블과 개체를 만들기 전에는 1차 테이블 정의서를 작성하고 이후 모니터링을 통해서 변경을 해 나가는 것이 좋다. 이 때 결정할 사항은 다음과 같다.

    . 테이블에 들어갈 데이터의 유형
    . 테이블의 열과 각 열의 데이터 형식 및 길이
    . Null 값을 허용하는 열
    . 제약 조건, 기본값, 규칙을 사용할지 여부와 사용할 위치
    . 필요한 인덱스 유형, 인덱스가 필요한 위치, 기본 키 및 외래 키가 될 수 있는 열 

 

[그림 1] 테이블 정의서를 참고하여 어떻게 작성하는지 이해하도록 하자.

다음 기사에서 데이터 유형을 설정하는 방법과 제약조건을 부여하는 방법에 대해 이야기 해보자.

 

 

[그림 1] 테이블 정의서

 

열 데이터 형식 지정

 

테이블을 디자인하는 첫 번째 고민이 각 열에 대한 데이터 형식을 부여하는 것이다.

어떤 열에는 문자데이터를 부여하고 어떤 열에는 숫자 데이터 형식을 부여하는지에 대한 해답을 찾아보자.

 

    . 열에 데이터 형식을 할당할 때는 SQL Server에서 지원하는 데이터 형식을 
      사용한다.
    . 시스템 데이터 형식에 기반한 사용자 정의 데이터 형식을 만들어 사용할 
      수도 있다.
    . 가장 기본적으로 테이블 열에 문자가 포함된다면 그 열에 문자 데이터 형식을 
      할당한다.
    . 열에 숫자만 포함된다면 숫자 데이터 형식을 할당한다.

이런 기본적인 열 데이터 형식 지정을 행하고 다음과 같은 데이터 무결성을 위해 강제 적용시키는 경우가 있다.

예를 들어, datetime 열은 유효한 날짜만 허용하기 때문에 datetime으로 정의된 열에는 이름을 저장할 수 없다.

데이터 무결성 강제 적용을 통해서 얻는 이점은 원천적으로 무결하지 않은 데이터가 입력되는 것을 방지하기 위함이다.

만약 테이블의 열의 데이터 형식과 다른 값이 입력이 되면 "데이터 형식이 일치하지 않습니다" 라는 에러메시지가 출력되어 값이 입력되지 않는다.

 

[그림] 테이블 열 데이터 형식 지정 예

열 이름                   데이터 형식         길이       Null 허용
번호                       int                      4
지점                       nvarchar             20          V
대리점                    nvarchar             20          V
년                          nvarchar             20          V
월                          nvarchar             20          V
일                          nvarchar             20          V
목표총점                 smallint              2           V
총점                       real                    4           V
.........

 

열에서 문자데이터를 설정하는 경우

 

테이블 열에서 문자데이터를 사용하는 경우 다음과 같은 데이터를 입력 받을 수 있다.

    . 문자, 기호, 숫자의 조합으로 구성되는 경우 
    . "가나", "가나12", "&^%", "12", "1999-02-01" 등등의 경우 

SQL Server에서 문자 데이터는 char, varchar 및 text 데이터 형식으로 저장된다.

 

데이터 형식별 설정하는 경우를 정리해 보면 다음 과 같다.

    . 열에 들어가는 문자의 수가 변하지만 8KB를 초과하지 않는 경우에는 varchar를 
      사용한다. 
    . 기본적으로 varchar를 사용하고 앞에 var이 붙는 경우는 가변을 뜻한다. 
        . 가변데이터의 경우 데이터가 들어오는 경우에 따라 크기가 다르게 
          설정된다. 
        . 가변데이터의 경우 데이터베이스의 크기를 적게 할당하는 장점이 있다. 
    . 열에 들어가는 문자가 최대 8KB까지의 같은 고정 길이면 char를 사용한다. 
    . text 데이터 형식의 열은 길이가 8KB 이상인 문자를 저장하는 데 사용한다. 
        . 보통 textarea 형태로 입력받는 열의 경우 text 데이터 형식으로 설정한다. 
    . 문자 열에 정의된 길이가 저장할 문자 데이터의 예상되는 최대 길이를 넘지
      않도록 한다. 
          . 회원 아이디를 입력받는 크기가 20자 이하라면 데이터 크기를 20으로 
            설정하면 된다. 
          . 입력되는 데이터 크기를 예상하기 힘들다면 가능한 넉넉히 크기를 잡는 
            것이 좋다. 
          . 데이터베이스의 용량의 확대를 고민하기 보다 안정성을 더 배려해야 한다. 
          . 설정된 데이터 열의 크기보다 입력되는 데이터의 크기가 크다면 
            "Truncate" 에러가 발생하게 된다. 
          . 에러를 발생하며 데이터는 입력되지 않는다. 

 

참고사항

--------------------------------------------------------------------

char

길이가 최대 8,000자이고 유니코드가 아닌 고정 길이 문자 데이터이다.

 

varchar

길이가 최대 8,000자이고 유니코드가 아닌 가변 길이 문자 데이터이다.

 

text

길이가 최대 2^31 - 1(2,147,483,647)자이고 유니코드가 아닌 가변 길이 데이터이다.

--------------------------------------------------------------------

 

열에서 날짜 및 시간 데이터를 설정하는 경우

 

날짜 및 시간 데이터는 유효한 날짜 또는 시간의 조합으로 구성된다.

날짜 및 시간 데이터는 그 규칙에 맞게 입력 되어야 에러를 발생하지 않는다.

유효한 날짜 및 시간 데이터로는 "2001-04-21", "4/01/98 12:15:00:00:00 PM", "1:28:29:15:01 AM 8/17/98" 등이 있다.

 

SQL Server에서는 날짜와 시간 데이터로 datetime 및 smalldatetime 데이터 형식을 지원한다.

    . datetime 데이터 형을 사용하는 경우 
          . 1753년 1월 1일부터 9999년 12월 31일의 범위에 있는 날짜를 저장 
          . 8바이트의 공간이 필요 
    . smalldatetime 데이터 형을 사용하는 경우 
           . 1900년 1월 1일부터 2079년 6월 6일까지 
           . 4바이트의 공간이 필요 

 

참고사항

--------------------------------------------------------------------

datetime

1753년 1월 1일에서 9999년 12월 31일까지 1/300초 또는 3.33밀리초의 정확성을 가진 날짜 및 시간 데이터dl다.

smalldatetime

1900년 1월 1일에서 2079년 6월 6일까지 1분의 정확성을 가진 날짜 및 시간 데이터이다.

--------------------------------------------------------------------

 

열에서 숫자 데이터를 설정하는 경우

 

테이블 열에서 숫자데이터를 사용하는 경우 양수 및 음수, 실수 및 분수, 정수를 입력 받을 수 있다.

 

정수 데이터

 

정수 데이터는 -15, 0, 5 및 2509 등과 같은 음의 정수 또는 양의 정수로 구성된다. SQL Server에서 정수 데이터는 bigint, int, smallint 및 tinyint 데이터 형식을 사용하여 저장된다.

    . bigint 데이터 형식은 int 데이터 형식보다 더 큰 범위의 수를 저장할 수 있다. 
    . int 데이터 형식은 smallint 보다 많은 정수를 저장할 수 있다. 
    . smallint 데이터 형식은 tinyint보다 많은 정수를 저장할 수 있다. 
    . bigint 데이터 형식을 사용하면 -2^63(-9223372036854775808)부터 
      2^63-1(9223372036854775807)까지의 수를 저장할 수 있다. 저장소 크기는 
      8바이트이다. 
    . int 데이터 형식은 -2,147,483,648부터 2,147,483,647까지의 정수를 저장할 때 
      사용한다. 값마다 4바이트의 공간이 필요하다. 
    . smallint 데이터 형식은 -32,768부터 32,767까지의 정수를 저장할 때 사용한다. 
      값마다 2바이트의 공간이 필요하다. tinyint 데이터 형식은 0부터 255까지의 
      정수를 저장할 때 사용한다. 값마다 1바이트의 공간이 필요하다. 

 

소수 데이터

 

소수 데이터는 최소 유효 숫자로 저장되는 데이터로 구성된다. SQL Server에서 소수 데이터는 decimal 또는 numeric 데이터 형식으로 저장된다. decimal 또는 numeric 값을 저장하는 데 필요한 바이트 수는 데이터의 총 자릿수와 소수점 오른쪽에 있는 소수 자릿수에 따라 달라진다. 예를 들어, 1.1을 저장하는 것보다 19283.29383을 저장하는데 더 많은 바이트가 필요하다.

    . SQL Server에서 numeric 데이터 형식은 decimal 데이터 형식과 같다. 

 

부동 소수점 데이터

 

부동 소수점 데이터는 이진 숫자 시스템에서 제공하는 것과 근사하게 저장되는 데이터로 구성된다. SQL Server에서 부동 소수점 데이터는 float 및 real 데이터 형식으로 저장된다. 예를 들어, 3분의 1을 소수로 표현하면 333333과 같이 3이 계속 반복되기 때문에 부동 소수점 데이터로는 정확하게 나타낼 수 없다. 따라서 SQL Server로부터 검색하는 값은 열에 원래 저장된 값과 정확히 같지 않을 수 있다. 근사 숫자 데이터의 또 다른 예는 .3, .6 및 .7로 끝나는 부동 소수점 값이다.

[Top]
No.
제목
작성자
작성일
조회
139DB 테이블 디자인에 도전하기 (4)
정재익
2001-12-07
5165
138DB 테이블 디자인에 도전하기 (3)
정재익
2001-12-07
9087
137DB 테이블 디자인에 도전하기 (2)
정재익
2001-12-07
6376
136DB 테이블 디자인에 도전하기 (1)
정재익
2001-12-07
11249
132연관 규칙과 의사결정트리를 이용한 패턴 탐사
정재익
2001-12-06
5647
108SQL 함수의 모든 것 - aggregate function
정재익
2001-12-03
11389
107ODBC 와 JDBC 를 이용한 데이터로의 접근 (IV)
정재익
2001-12-02
4798
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다