ice rabbit programming

[SQL] 관계형 데이터베이스(RDBMS)의 기초 2 - 자료형, 제약 조건 본문

Development/SQL

[SQL] 관계형 데이터베이스(RDBMS)의 기초 2 - 자료형, 제약 조건

판교토끼 2020. 6. 4. 15:51

자료형

여타 프로그래밍 언어와 비슷하게, DB에도 담는 데이터에 자료형이 있다. 자료형은 데이터의 유효한 값, 수행 가능한 연산, 의미, 저장 방식 등을 결정하기 때문에 굉장히 중요한 개념이다.

유효한 값이나 수행 가능한 연산 등은 견고한 서비스를 만들 수 있고, 나아가 보안에도 영향을 미치기 때문에 신경써야 한다.

int, float 등은 다른 언어와 비슷한데, varchar라는 자료형은 DB를 다뤄보지 않았다면 생소할 수도 있다. varahcar는 variable char로, 가변 문자열이다. char와의 차이점은 다음과 같다.

char(8) : 무조건 8자리 문자열, 6자리가 입력되어도 8자리의 공간 차지
varchar(8) : 최대 8자리 문자열, 6자리가 입력되면 6자리의 공간 차지

그러므로 꼭 정해진 규격을 맞추는 경우에 char를 쓰고, 가변적인 경우에는 varchar를 쓰는 것이 일반적이다.

제약 조건과 키

위에서도 말했듯이, DB의 유효한 값은 견고하고 안정적인 서비스, 보안 등을 위해 굉장히 중요하다. 이런 것을 위해 제약 조건을 걸 수 있다.

not null : 가장 대표적으로, null이 들어올 수 없다는 것이다. null은 비어있는 값으로, 해당 column이 무조건 존재해야할 때 사용하는 것이다. 고유키 등 중요한 값에 사용한다. 필자의 경험상 nullable일 때를 제외하면 not null을 넣어주는 편이 좋았다.

unique : 중복된 값을 허용하지 않는다. null은 허용한다.

check : 지정된 조건에 해당하는 값만 들어갈 수 있다. 예를 들어, 10 이하의 수만 지정해 두었다면, 11은 들어갈 수 없다.

default : not null과 비슷한데, 값이 들어오지 않았을 경우 기본값을 지정한다. 단, 값이 들어오지 않았을 경우에 null이란 것을 전제하고 있으므로 not null과 혼용할 수 없다.

이러한 제약 조건은 테이블을 만들 때 지정할 수도 있고, 만든 후에 column에 부여할 수도 있다.

키 : 제약 조건 중 하나, 데이터를 다른 데이터와 구분할 수 있는 기준.
키에는 고유키(기본키), 후보키, 외래키 등 종류가 많다.

일단 가장 중요한 고유키에 대해서 알아 보면, 우리나라 사람에 대한 주민 번호, 회사원에 대한 사번과 같이 각 row를 구분할 수 있는 유일성, 최소성을 가진 키이다. 더불어 not null과 unique의 속성을 함께 가진다.
유일성은 아마 다들 금방 이해하실텐데, 최소성은 살짝 이해가 가지 않을 수 있다.

{이름,주민번호,전화번호}로 세 가지를 묶는다면 {주민번호}와 같이 유일성을 만족할 수 있다. 하지만 키는 간결한 것이 좋기 때문에 {이름,주민번호,전화번호}가 아닌 {주민번호}가 고유키로 적합하다. 다만 하나인 경우가 없을 때는 멀티 키가 가능하다.

고유키의 성질을 가진다면 후보키라고 하고, 후보키들 중 고유키로 선택하지 않은 키들을 대체키라고 한다.

create table employee(
    주민등록번호 varchar(14) primary key,
    이름 varchar(10) not null,
    성별 varchar(1) not null
);

이런 식으로 테이블을 만들 때 column에 제약 조건을 줄 수 있다. primary key(고유키)로 지정한다면 not null과 unique 속성이 자동으로 지정된다.

'Development > SQL' 카테고리의 다른 글

[SQL] 관계, 외래키, alias, join  (0) 2020.06.28
[SQL] 관계형 데이터베이스(RDBM) 개요 및 기초  (0) 2020.06.02