Django의 데이터베이스 관계 이해

Django의 데이터베이스 관계 이해
당신과 같은 독자는 MUO를 지원하는 데 도움이 됩니다. 귀하가 당사 사이트의 링크를 사용하여 구매하면 당사는 제휴 수수료를 받을 수 있습니다.

데이터베이스 관계는 서로 다른 데이터베이스 테이블 간의 연결을 설명합니다. 관계는 데이터를 저장하고 검색하는 방법을 결정합니다. Django는 관계형 데이터베이스 시스템(RDBMS)과 잘 작동합니다. 따라서 데이터베이스 테이블 관계를 지원합니다.





관계 유형은 애플리케이션의 요구 사항과 애플리케이션이 모델링하는 데이터에 따라 다릅니다. Django 모델과 데이터베이스 간의 좋은 관계는 데이터 유지 관리를 향상시킵니다. 여기에는 쿼리 성능 향상 및 데이터 중복 감소가 포함됩니다.





오늘의 메이크업 비디오

세 가지 주요 관계 유형을 탐색하여 Django 데이터베이스 관계가 애플리케이션 성능에 미치는 영향을 배울 수 있습니다.





데이터베이스 관계

관계형 데이터베이스 시스템은 세 가지 유형의 데이터베이스 관계를 지원합니다. 이러한 관계는 일대다, 다대다 및 일대일입니다. 데이터베이스 관계 유형은 애플리케이션의 사용 사례에 영향을 미칩니다.

안드로이드 폰에서 클립보드는 어디에

장고 모델 앱에서 데이터베이스 테이블을 나타냅니다. 좋은 데이터베이스 시스템을 만들려면 테이블 간에 좋은 관계를 만들어야 합니다. 데이터베이스 관계는 애플리케이션에서 데이터를 저장하고 표시하는 방법을 결정합니다.



데이터베이스 관계를 이해하려면 다음으로 시작하십시오. 장고 프로젝트 생성 명명 된 후드. 앱은 이웃 소셜 네트워크가 될 것입니다. 다양한 이웃의 사회 활동, 보안 및 비즈니스를 관리합니다.

거주자는 등록, 로그인 및 프로필 생성을 할 수 있습니다. 또한 모든 사람이 볼 수 있는 게시물과 비즈니스 광고를 만들 수 있습니다.





시작하려면 모든 이웃 데이터를 저장할 데이터베이스를 만드십시오. 그런 다음 Profile, NeighborHood, Business 및 Post 모델을 생성합니다. 모델을 생성하려면 데이터베이스 테이블에 필요한 관계를 결정해야 합니다.

일대일 데이터베이스 관계

일대일 관계는 한 Django 모델의 레코드가 다른 모델의 다른 레코드와 관련됨을 의미합니다. 두 레코드는 서로 의존합니다. 이 경우, 프로필 모델 에 따라 달라집니다 사용자 모델 상주 프로필을 생성합니다.





따라서 앱에 등록된 각 거주자에 대해 하나의 프로필만 있을 수 있습니다. 또한 사용자가 없으면 프로필이 존재할 수 없습니다.

from django.db import models 
from django.contrib.auth.models import User

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
name = models.CharField(max_length=80, blank=True)
bio = models.TextField(max_length=254, blank=True)
profile_picture = CloudinaryField('profile_picture', default='default.png')
location = models.CharField(max_length=50, blank=True, null=True)
email = models.EmailField(null=True)

def __str__(self):
return f'{self.user.username} profile'

Django의 사용자 모델 Django에 내장된 인증 모델입니다. 모델을 만들 필요가 없습니다. 대신 다음에서 가져오십시오. django.contrib.auth. 그만큼 일대일필드() 프로필 모델 일대일 관계를 정의합니다.

그만큼 on_delete=모델.CASCADE 인수는 이러한 레코드 중 하나의 삭제를 방지합니다. 두 테이블 모두에서 레코드를 삭제해야 합니다.

Django 관리 인터페이스를 사용하여 앱의 관계를 시각화할 수 있습니다. Django admin에 로그인하려면 admin 사용자로 등록해야 합니다. 슈퍼유저 .

터미널에서 다음 명령을 실행하여 수퍼유저를 만듭니다.

python manage.py createsuperuser

사용자 이름, 이메일 및 비밀번호를 입력하라는 메시지가 표시됩니다. 완료했으면 서버를 시작합니다.

URL http://127.0.0.1:8000/admin을 사용하여 브라우저에서 관리자 페이지를 엽니다.

이전에 만든 자격 증명으로 로그인할 수 있는 관리자 페이지가 표시됩니다. 로그인하면 다음이 표시됩니다. 여러 떼 그리고 사용자 사물. Django 인증 프레임워크는 이 두 모델을 관리합니다. 하단에는 프로필 모델.

열기 프로필 모델을 선택하고 프로필 추가를 진행합니다. 다음과 같이 표시되는 것을 볼 수 있습니다.

  프로필과 사용자 모델 간의 관계를 표시하는 Django 관리자

사용자에 대한 프로필을 만들 수 있는 옵션이 있습니다. OneToOneField() 데이터 유형을 사용하면 인증된 사용자에 대한 프로필을 만들 수 있습니다. 이것이 앱이 일대일 관계를 관리하는 방법입니다.

일대다 관계

일대다 관계는 모델의 한 레코드가 다른 모델의 많은 레코드와 연결됨을 의미합니다. 다대일 관계라고도 합니다.

귀하의 경우 한 명의 관리자가 여러 이웃을 만들 수 있습니다. 그러나 각 이웃은 한 명의 관리자에게만 속할 수 있습니다. ForeignKey 데이터 유형을 사용하여 이러한 관계를 정의할 수 있습니다.

Django에는 내장 관리 인터페이스가 있습니다. 모델을 만들 필요가 없습니다. 관리자는 관리자 패널에서 콘텐츠를 관리하고 앱을 시각화할 수 있는 권한이 있습니다.

많은 레코드를 수용하는 모델은 외래키 . 관계를 일대다로 정의합니다. 아래 코드는 키를 배치할 위치를 보여줍니다.

class NeighbourHood(models.Model): 
admin = models.ForeignKey("Profile", on_delete=models.CASCADE, related_name='hood')
name = models.CharField(max_length=50)
location = models.CharField(max_length=60)
hood_logo = CloudinaryField('hood_logo', default='default.png')
description = models.TextField()
health_tell = models.IntegerField(null=True, blank=True)
police_number = models.IntegerField(null=True, blank=True)
Count= models.IntegerField(null=True, blank=True)

def __str__(self):
return f'{self.name} hood'

그림과 같이 앱에서 관계를 볼 수 있습니다.

  Neigborhood 모델은 관리자 선택이 추가되었음을 보여줍니다.

그만큼 이웃 이제 모델에 관리자가 있습니다. 누구나 동네를 만들려면 관리자 권한이 있어야 합니다. 그리고 한 이웃에 많은 관리자가 있을 수 없습니다.

다대다 데이터베이스 관계

다대다에서 한 모델의 많은 레코드가 다른 모델의 다른 레코드와 연결됩니다. 예를 들어, 게시하다 그리고 사업 모델은 서로에 대한 여러 레코드를 가질 수 있습니다. 사용자는 게시물에 여러 비즈니스 광고를 만들 수 있으며 그 반대의 경우도 마찬가지입니다.

그러나 다대다 관계를 만들면 부정확한 데이터가 생성될 수 있습니다. 다른 프레임워크에서는 두 테이블을 조인하기 위해 새 테이블을 만들어야 합니다.

Django에는 이에 대한 솔루션이 있습니다. 다대다 필드를 사용하면 두 테이블을 함께 매핑하는 새 테이블이 생성됩니다. . 두 모델 중 하나에 다대다 필드를 넣을 수 있지만 두 모델 모두에 있어서는 안 됩니다.

class Post(models.Model): 
title = models.CharField(max_length=120, null=True)
post = models.TextField()
date = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='post_owner')
hood = models.ForeignKey(NeighbourHood, on_delete=models.CASCADE, related_name='hood_post')
business = models.ManyToManyField(Business)

def __str__(self):
return f'{self.title} post'

이제 다음을 볼 때 게시하다 관리자 패널에서 모델을 선택하면 하나의 게시물에 여러 비즈니스를 첨부할 수 있습니다.

  포스트 모델에는 여러 비즈니스를 추가할 수 있는 옵션이 있습니다.

Django는 데이터베이스 관계를 단순화합니다.

애플리케이션에 사용하는 데이터베이스 유형에 따라 데이터 활용 방법이 결정됩니다. Django에는 관계형 데이터베이스를 쉽게 연결하고 운영할 수 있는 포괄적인 시스템이 있습니다.

Django 기능을 사용하면 관련 테이블에서 데이터를 쉽게 저장하고 검색할 수 있습니다. 앱에 대한 데이터베이스 관계를 연결하고 생성하는 API가 내장되어 있습니다.

데이터베이스 관계는 애플리케이션의 동작을 결정합니다. 일대일, 일대다 또는 다대다 관계를 사용하는지 여부는 사용자에게 달려 있습니다.

Django를 사용하면 애플리케이션을 중단하지 않고 기능을 구성하고 테스트할 수 있습니다. Django를 사용하여 데이터베이스 시스템을 보호하고 개발자 경험을 최적화하십시오.