반응형
관계형 데이터베이스에서 중요한 개념인 외래키에 관해서 설명하고, MSSQL 이용하여 foreign Key 테이블에 생성하는 방법에 대해서 실습하려고 합니다.
FOREIGN KEY의 개념
- 외래키(Foreign Key)는 관계형 데이터베이스에서 매우 중요한 개념입니다.
- Foreign Key는 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키를 이야기합니다.
- 쉽게 이야기하면, 외래키는 테이블 간의 관계를 연결해 주는 고리 역할을 합니다.
- 실무적인 예를 들어, 모두가 한 번씩은 사용해 본 경험이 있는 게시판에 글 제목하고 작성한 id를 확인할 수 있는데
- 이때 게시판의 id는 유저정보 테이블의 id와 일치해야 합니다.
- 결론적으로 게시판의 id와 사용자 테이블의 id는 서로 연결 관계로 생각하면 쉽게 이해가 됩니다.
FOREIGN KEY 추가 방법
테이블 생성 시 FOREIGN KEY 칼럼에 추가.
- FOREIGN KEY 예시 코드입니다.
CREATE TABLE [테이블이름] (
[column1] [dataType],
[column2] [dataType],
[column3] [dataType] FOREIGN KEY REFERENCES [참조 테이블명] ([참조 column 이름]),
[column4] [dataType],
...
);
- FOREIGN KEY 실습 코드입니다.
USE sampleDB;
DROP TABLE IF EXISTS UserInfoForFk;
CREATE TABLE UserInfoForFk (
userId varchar(20) PRIMARY KEY,
userNames varchar(50),
userHp int,
userAddress nvarchar(200)
);
DROP TABLE IF EXISTS boardForFk;
CREATE TABLE boardForFk (
boardId int,
boardTitle nvarchar(100),
writeId varchar(20) FOREIGN KEY REFERENCES UserInfoForFk (userId),
writeDt datetime
);
테이블 생성 시 FOREIGN KEY 이름 지정해서 추가.
- FOREIGN KEY sytax입니다.
CREATE TABLE [테이블이름] (
[column1] [dataType] NOT NULL,
[column2] [dataType],
[column3] [dataType],
[column4] [dataType],
CONSTRAINT [FOREIGN KEY명] FOREIGN KEY ( column3)
REFERENCES [참조 테이블명] ([참조 column 이름])
);
- FOREIGN KEY 소스 코드입니다.
USE sampleDB;
DROP TABLE IF EXISTS UserInfoForFk;
CREATE TABLE UserInfoForFk (
userId varchar(20) PRIMARY KEY,
userNames varchar(50),
userHp int,
userAddress nvarchar(200)
);
DROP TABLE IF EXISTS boardForFk;
CREATE TABLE boardForFk (
boardId int,
boardTitle nvarchar(100),
writeId varchar(20),
writeDt datetime,
CONSTRAINT Fk_UserInfoForFk FOREIGN KEY(writeId) REFERENCES UserInfoForFk (userId)
);
테이블 생성 후 FOREIGN KEY 추가.
- 예시 sytax입니다.
ALTER TABLE [테이블명] ADD CONSTRAINT [FOREIGN KEY명]
FOREIGN KEY ([ column 명]) REFERENCES [참조 테이블명] ([참조 column 명]) ;
- FOREIGN KEY 소스 코드입니다.
ALTER TABLE boardForFk ADD CONSTRAINT Fk_UserInfoForFk01
FOREIGN KEY (writeId) REFERENCES UserInfoForFk (userId)
FOREIGN KEY 있는 상태에서 Data 입력 및 삭제
Table에 FOREIGN KEY Insert 순서.
- parent table 입력, child table 입력 순으로 입력하면 에러 발생하지 않습니다.
- 유저테이블 입력 후 게시판에 입력가능 합니다.
- 실습코드입니다.
-- UserInfoForFk id 입력하지 않고 boardForFk(게시판) 먼저 입력한경우.
INSERT INTO DBO.boardForFk(boardId,boardTitle,writeId,writeDt)
values ('1',N'아우럼가이드','aurumguide',getdate())
go
-- parent table 입력 , child table 입력 순으로 입력하면 에러 발생하지 않음.
INSERT INTO DBO.UserInfoForFk(userId,userNames,userHp,userAddress)
values ('aurumguide',N'아우럼가이드',0101191140,'seoul')
go
INSERT INTO DBO.boardForFk(boardId,boardTitle,writeId,writeDt)
values ('1',N'아우럼가이드','aurumguide',getdate())
go
- 에러에 대한 화면입니다.
Table에 FOREIGN KEY Delete 순서.
- 입력 순서 반대로 child table 삭제 후 parent table 삭제해야 합니다.
- 게시판 data 삭제 후 유저 테이블 삭제가능 합니다.
- 소스 및 실행 화면 예제입니다. 꼭 실습해 보세요.
-- parent table 먼저 delete 한경우
delete from DBO.UserInfoForFk where userId ='aurumguide'
-- child table 삭제후 parent table 삭제
delete from DBO.boardForFk where writeId ='aurumguide';
go
delete from DBO.UserInfoForFk where userId ='aurumguide';
- 실습 따라 해 보세요.
FOREIGN KEY 삭제
외래키 삭제 방법.
- 예시 코드는 ALTER TABLE [테이블명] DROP CONSTRAINT [FOREIGN KEY명]입니다.
- 소스 코드입니다.
-- Fk 삭제
ALTER TABLE DBO.boardForFk DROP CONSTRAINT Fk_UserInfoForFk01
FOREIGN KEY 제약조건
테이블에 FOREIGN KEY 제약조건 확인.
- 예시코드 SP_HELPCONSTRAINT [테이블명]입니다.
- 실행 화면입니다.
FOREIGN KEY 마무리하며
- FOREIGN KEY는 자식 칼럼하고 부모 칼럼의 자료형을 동일하게 설계해야 합니다.
- 자식 칼럼에서 부모 칼럼을 참조하는 경우 부모 칼럼은 unique 칼럼으로 설계합니다.
- 부모칼럼은 자식칼럼에서 참조할 경우 삭제가 불가합니다.
- FOREIGN KEY을 사용하는 경우 코드형을 추천합니다.
- 관계형 database에서는 FOREIGN KEY는 data 무결성을 유지하기 위해서 매우 중요한 개념입니다.
반응형