ERD 개념 : https://velog.io/@stella_k/ERD
PK(primary key)는 데이터베이스 테이블에서 각 레코드(행)를 고유하게 식별하기 위한 열(속성)
주로 정수 형식의 일련번호로(ID)표현 => 장고를 사용해서 데이타 값을 넣어주면 알아서 id값을 부여해주는데 이때의 예가 될 수 있다.
테이블 내에 중복된 값을 가질 수 없고, NULL값을 가질 수 없다.
즉, 오직 하나만이 pk가 될 수있고, 값이 없어서는 안되는것이 특징이다.
unique=True처럼 다른 고유한 필드값은 있을수 있지만, 고유하다고 해서 PK가 되는것이 아니라는것.
주요 대표가 되는 오직 고유한 PK가 테이블에 한개 존재한다.
예) 사용자 -> 사용자 id번호 사용 => 몇번째 회원으로 가입되었는지. 또는 아이디 중복이 안되니까 말그대로의 유저네임이 pk가 될 수 도 있겠죠?
FK(foreign key)는 한 데이터의 테이블의 열에서 다른 테이블의 PK를 참조하는 열을 말한다.
여기서 ForeignKey는 일대다 관계라고 생각하면된다.
이 FK를 통해 두 테이블의 관계를 설정하고 연결 할 수 있다.
부모테이블(참조되는 PK가 있는 테이블)의 값을 자식 테이블에서(참조하는 테이블) 사용
예) 주문테이블에 사용자테이블의 PK참조하는 FK가 있으면 각 주문이 어떤 사용자에 의해 생성되었는지 추적할 수 있다.
python
from user.models import UserModel
class TweetModel(models.Model):
class Meta:
db_table = "tweet"
author = models.ForeignKey(UserModel, on_delete=models.CASCADE)
content = models.CharField(max_length=256)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
SQL코드
CREATE TABLE Users (
user_id INT PRIMARY KEY,
username VARCHAR(50),
email VARCHAR(100)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
user_id INT, -- FK referencing Users table
order_date DATE,
FOREIGN KEY (user_id) REFERENCES Users(user_id)
);
이런 느낌의 테이블이 생성되는것.
추가적 예시
도서관이라고 생각하고 ERD를 구성한다 생각할때:
여기서 보면 사용자 - 도서 테이블은 N:N의 관계이다.
그럼 대출테이블은 뭐냐? 바로 FK사용으로 두 테이블의 관계를 이어주는 브릿지 테이블의 역할을 하고 있다고 보면 된다. 더 효과적으로 관리하기 위한 테이블이다.