DataBase Relations

Jinhyeon Son·2020년 4월 12일
0

개념

목록 보기
10/26

관계

관계형 데이터베이스에서 데이터들간의 상호관련성을 표현하는 개념
  • one to one : 한 테이블의 레코드가 다른 한 테이블의 오직 한 레코드와 연관성을 가진다

    	ex) 하나의 커피는 하나의 영양성분표를 가질 수 있음
  • one to many : 한 테이블의 레코드가 다른 한 테이블의 여러 레코드와 연관성을 가진다

    	ex) 하나의 카테고리는 여러개의 음료를 가질 수 있음
  • many to many : 한 테이블의 레코드 들이 다른 한 테이블의 여러 레코드들과 연관성을 가진다

    	ex) 커피를 포함한 여러 음료들은 각각의 사이즈를 가질 수 있음

one to many

	위와 같은 관계에서 category는 beverage에 대하여 one to many관계이다
        django에서는 Foreignkey 사용을 통해 one to many 관계를 만들 수 있다

category에 속하는 beverage들을 다음과 같이 쿼리할 수 있다

# 정방향 참조
coffee = Category.objects.get(name='coffee')
Beverage.objects.filter(category=coffee)
# or
Beverage.objects.filter(category_id=coffee.id)

# 역방향 참조
coffee.category_set.all()
Category.objects.beverages.get(name='coffee').all()
# 테이블 클래스에서 접근하지 않으면 AttributeError가 발생한다

one to one

	위와같은 관계에서 beverage는 nutrient와 one to one관계이다
	django에서는 unique한 Foreinkey를 통해 다른 테이블을 참조하거나
	models.OneToOneField()를 통해 선언할 수 있다

one to one 테이블은 하나의 테이블에 구성되어도 문제가 없으나
테이블을 나눔으로 인해서 쿼리문이 가벼워질 수 있다

many to many

위와같은 관계에서 beverage는 ingredient와 many to many관계이다
MtoM관계를 표현하기 위해서는 중간 테이블이 필요하며 위에서는 allergic_nutrient이다
django에서는 models.ManyToManyField()를 통해서 구현할수 있으나
중간 테이블에 추가적인 데이터를 선언하고 싶으면 위와 같이 직접 중간테이블을 선언해야 한다

many to many 관계가 가질 수 있는 데이터의 종류를 위 테이블을 예를 들어 설명하면
id가 1인 beverage 테이블의 레코드 coffee는 ingredient 테이블의 레코드
caffeine, milk와 동시에 관계를 가질 수 있다

0개의 댓글