Primary key
정의
- 테이블에서 각 행을 유일하게 식별가능한 고유한 값을 가지고있는 속성이다.
(기본 키 설정을 하게되면 해당 컬럼은 중복될 수 없다.(null값도 포함)
특징
- 말 그대로 식별이 가능해야 하기 때문에 값이 두 개 이상 존재할 수 없음
- 한 테이블에 하나만 존재
model User {
id Int @id @default(autoincrement())
name String
email String unique
}
네임은 겹치더라도 id라는 고유 값이 존재하면 유저들을 식별할 수 있게 된다.
Foreign key
정의
- 다른 테이블의 생성된 primary key(기본 키)를 참조할 수 있는 속성이다.
(참조된 값이 없는 데이터를 삽입할 수 없고 참조된 데이터가 삭제, 변경될 때의 동작을 제어할 수도 있다.
- 테이블 간의 관계를 정의하는 역할이다.
- CASCADE 옵션
• ON DELETE Cascade: 참조된 기본 키가 삭제되면 해당 외래 키가 있는 행도 함께 삭제된다.
• ON UPDATE Cascade: 기본 키 값이 변경되면 외래 키 값 자동으로 업데이트된다.
model Order {
id Int @id @default(autoincrement())
userId Int
productName String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
- @relation: 두 테이블 간의 관계(연결)를 정의
- fields: [userId]: 현재 테이블(Order)에서 외래 키(Foreign Key)
- references: [id]: 다른 테이블(User)에서 참조할 기본 키(Primary Key)
정리
• 기본 키 한 테이블에 하나만 존재하지만 외래 키는 여러 개 존재할 수 있다.
• 외래 키 무결성을 유지하기 위해 ON DELETE CASCADE 같은 동작을 설정 가능하다.