Sql 기본키 외래키 - sql gibonki oelaeki

키 개념은 아래 링크를 보면 잘 알 수 있다. 

키의 종류 

https://terms.naver.com/entry.nhn?docId=3431147&cid=58430&categoryId=58430&expCategoryId=58430

수퍼키

https://terms.naver.com/entry.nhn?docId=3431148&cid=58430&categoryId=58430&expCategoryId=58430

레코드들을 식별할 수 있는 ‘필드의 집합’ (유일성)

테이블은 적어도 1개의 슈퍼키를 가져야 한다.

후보키

https://terms.naver.com/entry.nhn?docId=3431149&cid=58430&categoryId=58430&expCategoryId=58430

슈퍼키에서 레코드를 식별할 수 있는 최소한의 필드만 남겨놓은 집합 (유일성, 최소성)

Ex. 슈퍼키 { 학번, 학생이름, 학과 } 집합은 학번만으로도 레코드를 식별할 수 있으므로 부분집합 중 { 학번 } 집합만 후보키가 될 수 있다.

기본키

https://terms.naver.com/entry.nhn?docId=3431150&cid=58430&categoryId=58430&expCategoryId=58430

설계자가 여러 후보키 중 하나를 선택하여 정의한 식별자 (유일성, 최소성)

기본키의 모든 필드의 값은 null 이 될 수 없다.

외래키

https://terms.naver.com/entry.nhn?docId=3431152&cid=58430&categoryId=58430&expCategoryId=58430

다른 테이블의 기본키를 참조한다.

외래키의 모든 필드는 참조하는 기본키와 동일한 도메인(값의 종류&범위)을 갖는다.

외래키의 모든 필드의 값은 참조하는 기본키와 동일하거나 null 이다.

대체

기본키로 선택되지 못한 후보키들이다. 

이름에서 알 수 있듯이 대체키는 기본키를 대신할 수 있지만 기본키가 되지 못하고 탈락한 이유가 있을 수 있다. 

기본키를 선택할 때 고려할 사항을 하나씩 따져보면 기본키의 [주소 속성이 추가된 릴레이션의 예]의 고객 릴레이션은 고객아이디 속성을 기본키로 선택하는 것이 무난하다. 

따라서 기본키로 선택되지 못한 (고객이름, 주소) 속성 집합이 대체키가 된다. 

키는 관계형 데이터 모델에서 특정 레코드를 식별하기 위해 사용한다. 두 개 이상의 필드로 구성된 키를 복합키라고 한다. 키의 종류에는 슈퍼키, 후보키, 기본키, 외래키, 대체키가 있다.

기본키

https://www.w3schools.com/sql/sql_primarykey.asp

개인키를 테이블 생성 시에 삽입하는 방법은 아래와 같다.

MySQL:

CREATE TABLE Persons (

ID int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Age int,

PRIMARY KEY (ID)

);

SQL Server / Oracle / MS Access:

CREATE TABLE Persons (

ID int NOT NULL PRIMARY KEY,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Age int

);

여러 필드를 PRIMARY KEY를 묶기 위한 방법이다.

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons (

ID int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Age int,

CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)

);

ALTER TABLE Persons

ADD PRIMARY KEY (ID);

ALTER TABLE Persons

ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);

를 통해 PRIMARY KEY를 수정 할 수 있고

ALTER TABLE Persons

DROP PRIMARY KEY;

ALTER TABLE Persons

DROP CONSTRAINT PK_Person;

를 통해 기본키로 구성되어있던 것을 DROP 할 수 있다.

외래키

https://www.w3schools.com/sql/sql_foreignkey.asp

FOREIGN KEY Constraint

외래키는 두 테이블을 함께 쓸 때 연결하는 키이다.

외래키는 또다른 테이블에서 기본키를 지칭하기 위한 필드(or collection of fields)이다.

외래키를 포함하는 테이블은 child table라고 보통 말하고 후보키를 포함하는 테이블은 parent table라고 불린다.

MySQL:

CREATE TABLE Orders (

OrderID int NOT NULL,

OrderNumber int NOT NULL,

PersonID int,

PRIMARY KEY (OrderID),

FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)

);

SQL Server / Oracle / MS Access:

CREATE TABLE Orders (

OrderID int NOT NULL PRIMARY KEY,

OrderNumber int NOT NULL,

PersonID int FOREIGN KEY REFERENCES Persons(PersonID)

);

를 이용하여 외래키 설정이 가능하다.

외래키를 여러 컬럼을 함께 설정하고싶거나 CONSTRAINT를 이용하기 위해서는 아래와 같이 이용한다.

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders (

OrderID int NOT NULL,

OrderNumber int NOT NULL,

PersonID int,

PRIMARY KEY (OrderID),

CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)

REFERENCES Persons(PersonID)

);

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders

ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

외래키를 추가하기 위해서는 위와 같이 이용한다.

MySQL:

ALTER TABLE Orders

DROP FOREIGN KEY FK_PersonOrder;



SQL Server / Oracle / MS Access:

ALTER TABLE Orders

DROP CONSTRAINT FK_PersonOrder;

외래키를 DROP 하기 위해서는 위와 같이 사용한다.

'Applied > Database' 카테고리의 다른 글

[175번] Combine Two Tables  (0)2019.04.27
데이터베이스 CHECK, DEFAULT  (0)2018.08.24
데이터베이스 CREATE / DROP / ALTER DB, TABLE  (0)2018.08.20
데이터베이스 SELECT INTO, INSERT INTO SELECT, ISNULL, PROCEDURES  (0)2018.08.18
데이터베이스 UNION, GROUP BY, HAVING, EXISTS, ANY, ALL  (0)2018.08.16