Models - Relationships (Many-to-one)
확실히, 관계형 데이터베이스의 장점은, 테이블들끼리 관계를 생성하는데에서 옵니다.
관계형 데이터베이스란?
데이터베이스계의 주류로,
데이터를 로우 (Row:행, 줄) 과 컬럼 (Column: 열, 칸) 이라는 일종의 표 형태로 저장하고,
데이터의 종속성은 관계 (Relation) 으로 표현한다.
한 테이블에 있는 모든 로우는 같은 길이의 컬럼을 가지고 있으며, 이 컬럼의 구조와 데이터의 관계가 테이블 스키마 (Schema) 로 사전 정의 된다.
Django 는 가장 공통적인 relational database 3가지를 지원합니다.
many-to-one (1:M, 1 대 다수)
many-to-many (M:M, 다수 대 다수)
one-to-one (1:1, 일 대 일 )
Many-to-one relationships
다수 : 1 혹은 1: 다수 관계를 정의하기 위해서는, django.db.models.ForeignKey 를 사용합니다.
모델내에 클래스 속성으로 다른 필드 타입을 사용하는것과 비슷하게 사용할수 있습니다.
ForeignKey 는 위치 인자를 필수적으로 필요로 합니다
ForeignKey 를 사용하면, 다른 모델과 해당 필드에 관계를 만들어 놓을수 있습니다.
ForeignKey 를 사용할때에는, 위치인자에 관계를 만들고 싶은 다른 class 이름을 넣어줍니다.
예를들면,
1 | from django.db import models |
- Car 모델은 하나의 Manufacturer 를 가집니다
- 하나의 Manufacturer (브랜드 공장) 은 여러개의 자동차를 생산합니다
- 하지만, 각 자동차는 하나의 Manufacturer 만 가질수 있습니다
- 다수 : 1 의 데이터베이스 관계를 성립하여, ForeignKey 를 이용해 위의 예시처럼 정의해주었습니다.
또한, 재귀적인 관계를 생성할수도 있습니다 (many-to-one 관계를 스스로 갖는 객체)
필수는 아니지만, 권장되는 사항은, ForeignKey 필드 이름은 해당 모델의 소문자로 표현하는게 좋습니다.
하지만, 당연히 필드명은 우리가 원하는데로 지을수 있습니다.
1 | class Car(models.Model): |
예시
1 | class Dev_Department(models.Model): |
- 개발 조직에 있는 하나의 팀에는, 여러명의 직원이 소속될수 있습니다
- Dev_Staff 는, 직원의 이름과 부서 팀을 정의합니다. ForeignKey 를 사용하여, Dev_Department 와 관계를 가지게 정의되었습니다.