FK(외래키)

MySQL에서 FK(외래키)는 다른 테이블의 기본키(primary key)를 참조하여 현재 테이블의 필드를 정의할 때
사용되는 제약 조건입니다. 즉, FK를 사용하여 두 개 이상의 테이블 간에 관계를 설정할 수 있습니다.”

예를 들어 학생 테이블과 학교 테이블이 있다고 가정해보면, 
학교 테이블의 id(school_id) 필드는 primary key로 설정되어 있고, 
학생 테이블의 school_id 필드는 학교 테이블의 id 필드를 참조하는 외래키(FK)로 설정될 수 있습니다.
**이렇게 설정된 외래키 제약 조건을 통해 학생과 학교 간에 1:N 관계를 설정할 수 있습니다.**

부모 테이블과 자식 테이블은 RDBMS에서 테이블 간의 관계를 표현하는 데 사용되는 용어입니다.
부모 테이블은 관계에서 상위에 위치하며, 자식 테이블은 하위에 위치합니다. 
부모 테이블은 일반적으로 자식 테이블에 대한 주요 키(PK)를 가지고 있으며,
자식 테이블은 부모 테이블의 키를 참조하는 외래 키(FK)를 가지고 있습니다.
CREATE TABLE school (
  school_id INT PRIMARY KEY,
  school_name VARCHAR(20) NOT NULL,
  city VARCHAR(20)
);

CREATE TABLE student (
  student_id INT PRIMARY KEY,
  student_name VARCHAR(50) NOT NULL,
  grade VARCHAR(3) NOT NULL, 
  school_id INT,
  FOREIGN KEY (school_id) REFERENCES school (school_id)
);


INSERT INTO school (school_id, school_name, city)
VALUES
  (1, '서울대학교', '서울'),
  (2, '고려대학교', '서울'),
  (3, '연세대학교', '서울'),
  (4, '한양대학교', '서울');
  

  
  
INSERT INTO student (student_id, student_name, grade, school_id)
VALUES
  (1, '홍길동', '1학년', 1),
  (2, '김유신', '2학년', 2),
  (3, '이순신', '1학년', 3),
  (4, '유관순', '3학년', 1),
  (5, '안중근', '2학년', 4),
  (6, '정약용', '3학년', 3),
  (7, '장영실', '1학년', 2),
  (8, '윤봉길', '2학년', 1);  
  
-- ------------------  
select * from school;
select * from student;
  
  
-- FK 관계를 가질 때 잘못된 값 확인해 보기 
INSERT INTO student (student_id, student_name, grade, school_id)
VALUES
  (9, '홍길동', '1학년', 10);  
  
-- 오류가 발생되는 이유는 school_id 컬럼은 외래키이고 
-- 참조 하고 있는 부모 테이블에 PK(school_id 컬럼) 값에 
-- 10이라는 데이터가 없기 때문에 데이터의 무결성을 해치기 때문이다.

야구 팀과 야구 선수 관계 1:N

FK 설정하기 

-- 야구 팀과 야구 선구 관계 1 : N 
create table team (
	id INT primary key auto_increment,
    team_name varchar(50) NOT NULL
); 

create table player (
	player_id int primary key auto_increment,
    paler_name varchar(50) not null, 
    team_id int, 
    foreign key(team_id) references team(id)
);

부서와 직원의 관계 - 1 : N

create table department(
	id int primary key, 
    department_name varchar(50) not null
);

create table employee(
	id int primary key, 
    name varchar(20) not null, 
    department_id int, 
    foreign key(department_id) references department(id) 
);

상품과 주문 목록 관계 - 1 : N

create table department(
	id int primary key, 
    department_name varchar(50) not null
);

create table employee(
	id int primary key, 
    name varchar(20) not null, 
    department_id int, 
    foreign key(department_id) references department(id) 
);

상품과 주문 목록 관계 - 1 : N

create table product(
	id int primary key auto_increment, 
    name varchar(30) not null, 
    price int not null
); 

create table `order`(
	order_id int primary key,  
    order_date DATE NOT NULL, 
    product_id INT, 
    foreign key(product_id) references product(id)
);

'MYSQL' 카테고리의 다른 글

JOIN 구문  (0) 2023.03.16
1 : 1 관계  (0) 2023.03.16
1 : N (One-to-Many Relationship) 차수에 대한 고찰  (0) 2023.03.16
관계 차수  (0) 2023.03.16
요구 분석과 시스템 설계 모델링  (0) 2023.03.15

+ Recent posts