Skip to main content

Command Palette

Search for a command to run...

[database] 키와 제약 조건

Published
3 min readView as Markdown

릴레이션(Relation)과 키(Key)

관계형 데이터 모델

관계형 데이터베이스 개념은 관계형 데이터 모델에 기반하고 있다.
관계형 데이터 모델은 이론적으로는 릴레이션(relation)이라는 수학적 집합 개념에 기초하고 있다.

관계 모델에서 릴레이션(relation)은 동일한 구조로 이뤄진 튜플(tuple)의 집합을 말한다.
쉽게 표현하면 릴레이션은 2차원 테이블(table) 형태의 단순한 구조다.

테이블 개념은 내부 저장 구조에 대한 추상적인 표현일 뿐이고, 물리적으로는 복잡한 구조 속에 데이터가 저장된다.

관계형 데이터베이스에서 데이터베이스는 전체 릴레이션들의 모임이다.

릴레이션 용어 정리

  • 속성(attribute) : 테이블의 열(column). 데이터를 표현하는 가장 작은 논리적 단위
  • 속성 집합(attribute domain) : 각 속성이 취할 수 있는 모든 값들의 집합을 정의한 것. 데이터 타입과 비슷!
  • 튜플(tuple), record : 테이블의 각 행(row)
  • 차수(degree) : 릴레이션을 구성하는 전체 속성의 개수. 각 튜플이 가지는 속성값의 개수는 해당 릴레이션의 차수와 같다.

키(Key)

튜플의 유일성 규칙을 충족시키기 위해 모든 릴레이션은 키(Key) 를 갖는다.
키는 릴레이션이 단순한 테이블이 아님을 보여주는 대표적 개념이다.
데이터베이스에서 키는 여러 무결성 제약 조건에 대해 중요한 역할을 한다.

후보키(Candidate Key)

튜플을 유일하게 식별할 수 있는 속성들의 최소(부분) 집합.
후보키는 유일성과 최소성 조건을 모두 만족해야 한다.

  • 유일성 : Key로 하나의 튜플을 유일하게 식별할 수 있음
  • 최소성 : 각 튜플들을 유일하게 식별하기 위해 꼭 필요한 최소한을 만족

예를 들어, 속성 중 '이름'을 기본키로 사용한다면 동명이인이 있을 수 있기 때문에 유일성을 만족할 수 없다.

모든 릴레이션은 최소 하나 이상의 후보키를 가진다.

기본키(Primary Key)

튜플을 대표하도록 선정된 후보키.
대부분의 DB에서는 id로 튜플을 식별한다.

대체키(Alternate Key)

기본키로 선정되지 못한 후보키.

슈퍼키(Super Key)

유일성은 만족하지만, 최소성과는 상관 없는 키.
투플을 유일하게 식별할 수 있는 속성들의 집합.
꼭 필요한 속성이 아니어도 포함된다.

외래키(Foreign Key)

외부 릴레이션의 키를 참조하는 키 외래키의 값은 참조될 다른 릴레이션의 기본키(PK) 중에서 하나를 골라 정한다.

외래키 포함한 테이블 생성 (sql) sql CREATE TABLE table_name ( id INTEGER PRIMARY KEY, col3 INTEGER FOREIGN KEY REFERENCES other_table(other_id), ... )

무결성 제약 조건

데이터 무결성(integrity) 은 데이터베이스에 저장된 데이터의 일관성정확성을 지키는 것을 말한다.

개체 무결성 제약 조건(PK constraint)

기본키(PK)로 지정한 모든 속성은 NULL값을 가질 수 없고 릴레이션 안에서 중복되지 않는 유일한 값을 가지도록 하는 제약 조건

개체의 유일성을 위해, 왠만하면 릴레이션마다 PK를 정의해야 한다.
보통은 테이블을 생성할 때 PRIMARY KEY(기본키)를 선언함으로써 적용된다.

SQL PRIMARY KEY sql CREATE TABLE Persons ( ID int NOT NULL PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int );

참조 무결성 제약 조건(FK constraint)

외래키(FK)로 지정한 속성은 참조하는 릴레이션의 기본키(PK) 값과 일치하거나 NULL값을 가지도록 하는 제약 조건 어떤 개체의 외래키가 NULL 값을 갖는다는건 관련된 개체가 없음을 의미한다.
반면에 어떤 값을 갖는다면, 그 값은 반드시 관련된 개체의 기본키값과 일치해야 한다.

만약 관계된 개체를 삭제하려면, 그걸 참조중인 개체를 먼저 삭제하거나 관계를 끊어야 한다.
외래키의 값이 존재하지 않는 기본키라면 PK 제약 조건을 위배하기 때문이다.

SQL FOREIGN KEY sql CREATE TABLE Orders ( OrderID int NOT NULL PRIMARY KEY, OrderNumber int NOT NULL, PersonID int FOREIGN KEY REFERENCES Persons(PersonID) );

도메인 무결성 제약 조건(domain constraint)

튜플의 모든 속성 값이 각 속성 도메인에 속한 값만을 취하도록 하는 제약 조건. SQL에서 테이블 생성시 각 열의 타입을 명시하거나
NULL 혹은 NOT NULL, DEFAULT(디폴트 값), CHECK(값 범위 체크 조건) 등의 키워드 설정을 써서 제약을 명시한다.

유일성 제약 조건(uniqueness constraint)

속성 값이 서로 중복되지 않고 유일하도록 하는 제약 조건. SQL에서 테이블 생성시에 UNIQUE(유일 조건) 키워드 설정을 써서 명시한다.

참고

  • https://ko.wikipedia.org/wiki/SQL
  • https://victorydntmd.tistory.com/126
  • http://wiki.hash.kr/index.php/%EC%88%98%ED%8D%BC%ED%82%A4

More from this blog

[JPA] 엔티티 equals 오버라이딩 괜찮을까?

최근에 한 딜레마에 빠졌다. 레포지토리에 대한 테스트 코드를 짜고 있었는데, 확실한 DB 조회 확인을 위해 영속성 컨텍스트를 초기화(em.clear)하면서 문제가 생겼다. 테스트에서 em.clear()을 했을 때의 예시 @BeforeEach 에서 먼저 필드에 더미 데이터를 넣어준다. 추후의 테스트를 편리하게 할 목적의 필드이다. // ... public class MemberRepositoryTest { // ... ...

Oct 26, 20233 min read

[network] JWT

왜 필요한데? 보안 문제 만약 서버와 클라이언트가 서로 유저 정보를 순수 JSON으로 보내게 되면, 이게 유효한 정보인지 확인할 방법이 없다. 만약 악의를 가진 공격자가 유저 ID를 바꿔서 요청을 했을 경우, 서버에선 무슨 일이 일어난 건지 알 방법이 없다. 그래서 유저를 식별할 수 있는 중요한 데이터를 토큰화시켜 주고받게 된다. HTTP의 특징 기본적으로 HTTP 통신은 무상태(Stateless)이다. 매번 사용자가 로그인...

Feb 28, 20234 min read

[network] HTTP & HTTPS

HTTP(Hypertext Transfer Protocol)란? HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약이다. 대표적으로 주고 받는 데이터 형태는 HTML이다. OSI 7계층중 응용계층에 속하는 프로토콜 TCP/IP 위에서 작동 Request와 Response로 통신 비연결지향(Connectionless) HTTP는 클라이언트가 요청(Request)을 서버에 보내고, 서버는 클라이언트에게 적절한 응답(Response)을 ...

Feb 26, 20233 min read

[database] 트랜잭션

트랜잭션 트랜잭션(transaction)이란? 한 묶음으로 처리되도록 만든 SQL 명령문들을 묶은 작업 단위 대부분의 의미 있는 서비스 처리를 하려면 SQL 명령문 한번 (SELECT, UPDATE, …)만으로는 어렵다. 계좌이체라는 작업을 예시로 들어보자. 만약 X의 돈을 100 감소시키는 UPDATE 문 직후에 서버가 다운되면 어떻게 될까? 더 이상 서버에선 쿼리문을 날리지 못하니, Y에겐 100만큼의 돈이 가지 않고 회사가 X의 돈을 ...

Feb 21, 20232 min read

[database] JOIN

JOIN JOIN이란? 둘 이상의 릴레이션에 흩어져 있는 튜플들을 특정 조건으로 조합하여 하나의 릴레이션을 구성하도록 검색(SELECT)하는 방법. 조인은 릴레이션들의 공통 속성을 기준으로 하므로 테이블들간에 최소한 하나의 속성을 공유하고 있어야 한다. 여러가지 조인 조건에 따라 검색 결과를 다르게 할 수 있다. 아래는 업데이트된 과목, 수강 테이블. 과목번호과목명강의 교수 001컴퓨터구조장성태 002정보보호개론양수미 003...

Feb 10, 20235 min read

wonslee

15 posts