반응형

장고 프레임워크를 활용하여 DB 모델을 만들고 있었습니다.

일반적인 DB를 활용하여 테이블을 만들때는 제약조건에 null만 있습니다.

null 이라 함은 값이 없음을 의미하는 값 입니다.

하지만 장고 모델을 작성하다 보니 blank라는 제약조건이 있었는데요.

이 둘의 차이점을 알아보도록 하겠습니다.

 

1. 공식문서

 

 django null

django 공식문서에 null 설명입니다. True라고 설정이 된다면 데이터베이스 내 빈 값을 저장할 수 있다고 합니다. 마지막줄을 보시게 되면 장고에서 사용되는 forms 관련해서는 blank 파트를 보라고 설명이 되어 있습니다.

다음 blank를 보겠습니다.

 

django blank

blank가 True인 경우에는 blank라고 설명이 되어 있는데요. 여기까지 보면 null과 별 차이가 없습니다.

다음 라인을 보시게 되면 차이점이 있습니다.

null은 물리적인 데이터베이스와 관련이 있고, blank는 유효성과 관련이 있습니다.

즉, null은 데이터베이스의 직접적인 연관이 있고 null 옵션을 통해서 데이터베이스의 null이라는 제약조건을 주고 blank옵션은 물리적으로 데이터베이스에는 연관이 없으며 django forms을 사용한 유효성 검사와 관련이 있습니다.

 

 

2. 코드와 테이블 설계도

실제코드는 아래와 같습니다.

class TestNullBlank(models.Model):
    null_true   = models.CharField(max_length=10, null=True)
    null_false  = models.CharField(max_length=10, null=False)
    blank_true  = models.CharField(max_length=10, blank=True)
    blank_flase = models.CharField(max_length=10, blank=False)

 

테이블이 만들어지는 데이터베이스 설계도

PostgreSql 데이터베이스 기준입니다.

CREATE TABLE TestNullBlank (
  id              serial			NOT NULL,
  "null_True"     character varying(10),
  "null_False"    character varying(10)		NOT NULL,
  "blank_True"    character varying(10)		NOT NULL,
  "blank_False"   character varying(10)		NOT NULL,
  CONSTRAINT TestNullBlank PRIMARY KEY (id)
)

 

null이 허용되는(null=True) 첫번째 컬럼 null_True를 제외하고는, 모두 null 값이 허용이 안됩니다.

 

데이터베이스 설계는 정말 중요합니다.

스키마를 만드는데 있어 빈틈없이 꼼꼼하게 설계를 만들어야겠습니다.

감사합니다.

 

* 장고 공식문서 참고

https://docs.djangoproject.com/en/3.0/ref/models/fields/#null

반응형

+ Recent posts