외래키

김동현·2023년 12월 5일

Question

목록 보기
8/15
post-thumbnail

Foreign Keys

Foreign 외국의, 대외의, 이질적인
Keys 열쇠, 키

데이터베이스 관리 시스템에서 외래키는 두 개의 개별 테이블 간의 링크를 설정하고 유지하는 필드이다.
외래 키는 관계형 데이터 베이스 내에서 참조 무결성을 보장하는 제약 조건으로 작용한다!
외래 키를 사용함으로서 서로 다른 테이블 간에 저장된 데이터의 일관성을 유지할 수 있게 된다.

관계형 데이터 베이스

외래 키는 관계형 데이터베이스(Relational Database)에서 사용하는 개념이다.
관계형 데이터 베이스란, 테이블로 이루어져 있으며 서로 연관된 데이터 포인트를 저장하고 이와 관련된 테이블에 엑세스할 수 있도록 구조화 되어 있는 데이터 베이스입니다.

Relational의 Relation은 행렬을 배울 떄 사용하는 Relation이라는 단어에서 기인했다고 합니다 :)

출처: 코딩애플

무결성과 제약 조건

데이터베이스 무결성이란, 권한을 갖은 사용자로부터 데이터베이스의 정확성을 지키는 것을 말한다.
즉, 데이터 베이스에 저장된 데이터의 정확성과 일관성을 지키는 것이다.

정확성 (正 바를 정 確 굳을 확) <- 어떤 기준이나 사실에 잘못됨이 없고 바르게 알맞은 상태에 있다.

정확성이란, 신뢰할 수 있는 정보 소스로 사용될 수 있는 오류 없는 기록을 말합니다.
Jack Olson의 데이터 품질, 정확도 차원에서 정확도는 형식과 내용을 데이터 정확도의 가장 중요한 특성으로 설명한다.
예를 들면, 미국 데이터베이스에서는 날짜가 MM/DD/YYYY 형식을 따르는 반면, EU 데이터베이스 및 기타 국가에서는 DD/MM/YYYY를 따르게 된다.
09/10/2020을 콘텐츠로 변환했다면 둘 중 어느 것이 정확할까?
9월 10일? 10월 9일? 뭘까?

🤔 그래서 ISO 8601 형식 표준이 나왔나보다
YYYY-MM-DD(2020-09-10)

즉, 데이터 베이스의 정확도는 것은 우리가 세운 기준 또는 사실에 부합하는 데이터가 얼마나 있느냐이다!

무결성(無 없을 무 缺 이지러질 결) <- 결점이나 결함이 없다
즉, 데이터 베이스에 데이터가 원하는 바 대로 정확하게 있다.
즉, 정확한 데이터가 있다는 것이다 😁
우리가 원하는 데이터들만 있다는 것이다

데이터 베이스는 무결성을 지키기 위해 제약 조건을 지원하게 된다.
무결성을 지키기 위해 저장, 삭제, 수정 시 제약 조건이 추가 되며, 이를 통해 데이터의 무결성을 보장한다.

제약 조건
제약 조건이란 데이터를 입력, 수정, 삭제 될 때 실행되는 검사 규칙들을 말한다.
즉, 데이터가 들어올 때 올바른 정보인지, 우리가 정한 기준에 적합한 데이터 인지 아닌 지 검사할 때 실행되는 규칙인 것이다.

제약 조건의 장점
1. 스키마를 작성 할 때 한 번만 명시하면 데이터베이스가 갱신 될 때마다 DBMS가 자동으로 제약 조건을 검사한다.
2. 무결성 제약 조건 덕분에 데이터의 신뢰성이 보장된다.

무결성의 종류

물리적 무결성

물리적 무결성이란 데이터를 저장하고, 검색할 때 데이터의 완전성과 정확성을 보장하고, 보호하는 것이다.
😭 자연재해나 정전 또는 디스크 드라이버가 충돌하면 데이터의 무결성이 손상된다.
이를 통해 정확한 데이터가 확보되는 것이 불가능 해 질 수 있다.

논리적 무결성

논리적 무결성이란, 관계형 데이터베이스에서 데이터를 변경되지 않게 유지하는 방법이다.

  1. 엔티티 무결성
    엔티티 무결성이란, 데이터를 식별하는 고유 값인 기본키를 생성하여 데이터가 두 번 이상 중복되지 않는 것을 보장한다.
    또한, 기본키는 NULL이 되지 않도록 관리한다.
    기본키를 활용하여 테이블을 연결하고 레코드를 식별할 수 있게 된다.
CREATE TABLE Customers (
    customer_id INT PRIMARY KEY, -- PK로 식별한다.
    firstname VARCHAR(50),
    lastname VARCHAR(50),
    email VARCHAR(100) UNIQUE -- 이메일은 중복되면 안된다
);
  1. 참조 무결성
    참조 무결성이란, 데이터가 균일하게 저장되고 사용되도록 하는 프로세스를 제공한다.
    개발자의 실수로 관련된 데이터가 삭제되거나 수정되는 것을 막아 주는 역할을 하는 규칙이다.
    이를 통해, 고아 레코드(해당 상위 레코드가 없는 하위 테이블의 레코드)를 방지하고 테이블 간의 관계가 유효하고 신뢰할 수 있도록 하는 것이다!
CREATE TABLE Authors (
    author_id INT PRIMARY KEY,
    authorname VARCHAR(50)
);

CREATE TABLE Books (
    book_id INT PRIMARY KEY,
    title VARCHAR(100),
    author_id INT,
    FOREIGN KEY (auth_id) REFERENCES Authors(auth_id)
        ON DELETE CASCADE -- 참조 되는 AuthorId가 삭제되면 같이 삭제된다.
        ON UPDATE CASCADE -- 참조 되는 AuthorId가 수정되면 같이 수정된다.
);
  1. 도메인 무결성
    도메인 무결성이란, 도메인에 있는 각 데이터의 정확성을 유지시켜 주는 것이다.
    여기서 도메인은 테이블 에 포함할 수 있는 허용 가능한 값의 집합을 말한다.
    입력되는 데이터의 형식, 유형 및 길이(양)을 제한하는 제약 조건이 여기에 포함된다.
CREATE TABLE Students (
    student_id INT PRIMARY KEY,
    firstname VARCHAR(50),  -- 50자까지 가능
    lastname VARCHAR(50),	-- 50자까지 가능
    age INT CHECK (Age >= 18) -- 18세 이상만 들어올 수 있다.
);
  1. 사용자 정의 무결성
    사용자 정의 무결성은 사용자에게 맞게 만든 규칙과 제약 조건을 일컫는다.
    위 3가지 만으로 데이터를 보호하기에 충분하지 않을 수 있기에, 해당 사용자 정의 무결성을 활용할 수 있다.
delimiter $$ # 구분문자를 세미콜론에서 $$로 바꿔준다.
CREATE FUNCTION id_generator()
RETURNS int # return 타입 (!!s필수)
NO SQL      # 메뉴얼 확인해보기
BEGIN       # body 시작
	RETURN (1000000000 + floor(rand() * 100000000));
END         # body 끝
$$
delimiter ; # 구분 문자를 다시 ;으로 원복시킨다.

데이터 무결성은 정보가 데이터 베이스 내에 존재하는 동안 온전하고 정확하게 유지하는 것과 관련이 있다!

외래키

다시, 외래 키로 돌아와보자
외래 키는 참조 무결성을 보장하기 위해 사용하는 제약 조건이다

테이블에 외래 키를 정의하면 일반적으로 참조된 테이블의 기본 키인 열을 기반으로 해당 테이블과 다른 테이블 간의 관계가 생성된다.
외래 키 제약 조건은 한 테이블의 외래 키 열 값이 다른 테이블의 기본 키 열 값과 일치하는지 확인하고, 이는 테이블 간 관계의 무결성을 유지하여 고아 레코드 또는 데이터 불일치를 초래할 수 있는 작업을 방지하는 데 도움이 된다!

  1. ON DELETE CASCADE: 참조된 레코드가 삭제되면, 해당 외래 키를 가지고 있는 테이블의 관련된 레코드도 자동으로 삭제됩니다.
  2. ON DELETE SET NULL: 참조된 레코드가 삭제되면, 해당 외래 키를 가지고 있는 테이블의 관련된 레코드의 외래 키 값은 NULL로 설정됩니다.
  3. ON DELETE SET DEFAULT: 참조된 레코드가 삭제되면, 해당 외래 키를 가지고 있는 테이블의 관련된 레코드의 외래 키 값은 기본값(default value)으로 설정됩니다.
  4. ON DELETE NO ACTION: 참조된 레코드가 삭제되면, 해당 외래 키를 가지고 있는 테이블의 관련된 레코드는 영향을 받지 않습니다. 삭제 작업이 제한되는 대신 오류가 발생할 수 있습니다. 이는 일반적으로 외래 키 제약 조건을 유지하면서 삭제 작업을 제한하기 위해 사용됩니다.

외래 키제약 조건의 ON DELETE, ON UPDATE 절을 사용하면 상위 테이블의 참조 레코드가 삭제되거나, 수정 될 때 수행해야 하는 작업을 정의할 수 있다.
같이 삭제하거나, Null로 만들거나, 기본 값으로 바꾸거나, 삭제 작업을 못하게 하거나 하는 등의 제약 조건을 걺으로써 참조 무결성을 보장할 수 있다!

즉, 내가 삭제하고자 하는 값을 참조하고 있는 테이블의 레코드는 어떻게 할 것인지 정의하는 것이다!
-> 이를 통해 관계된 테이블 내에서 관계된 데이터들의 정확성을 보장하여 데이터베이스 무결성을 확보할 수 있게 되는 것이다! 😎

참고 자료

profile
달려보자

0개의 댓글