成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

理解Django中的數(shù)據(jù)庫關(guān)系

譯文
數(shù)據(jù)庫 其他數(shù)據(jù)庫
處理好表關(guān)系是創(chuàng)建可靠數(shù)據(jù)模型的關(guān)鍵。

譯者 | 布加迪

審校 | 孫淑娟

數(shù)據(jù)庫關(guān)系描述不同數(shù)據(jù)庫表之間的關(guān)系。這種關(guān)系決定了如何存儲(chǔ)和檢索數(shù)據(jù)。Django支持?jǐn)?shù)據(jù)庫表關(guān)系,非常適用于關(guān)系數(shù)據(jù)庫系統(tǒng)(RDBMS)。

關(guān)系類型有賴于應(yīng)用程序的需求及其建模的數(shù)據(jù)。Django模型與數(shù)據(jù)庫之間的良好關(guān)系改善了數(shù)據(jù)維護(hù),這包括改進(jìn)查詢性能和減少數(shù)據(jù)重復(fù)。

您可以通過探究三種主要類型的關(guān)系,了解Django數(shù)據(jù)庫關(guān)系如何影響應(yīng)用程序性能。

一、數(shù)據(jù)庫關(guān)系

關(guān)系數(shù)據(jù)庫系統(tǒng)支持三種類型的數(shù)據(jù)庫關(guān)系:一對(duì)多關(guān)系、多對(duì)多關(guān)系和一對(duì)一關(guān)系。數(shù)據(jù)庫關(guān)系的類型影響應(yīng)用程序的用例。

Django模型代表應(yīng)用程序中的數(shù)據(jù)庫表。想創(chuàng)建良好的數(shù)據(jù)庫系統(tǒng),必須在表之間建立良好的關(guān)系。數(shù)據(jù)庫關(guān)系決定著如何在應(yīng)用程序中存儲(chǔ)和顯示數(shù)據(jù)。

想了解數(shù)據(jù)庫關(guān)系,不妨先創(chuàng)建一個(gè)名為Hoods的Django項(xiàng)目。該應(yīng)用程序?qū)⑹且粋€(gè)社區(qū)社交網(wǎng)絡(luò),它將管理各個(gè)社區(qū)的社交活動(dòng)、安全和企業(yè)。

居民可以注冊(cè)、登錄和創(chuàng)建個(gè)人資料。他們還可以創(chuàng)建貼子和商業(yè)廣告,所有人都能看到。

先創(chuàng)建一個(gè)數(shù)據(jù)庫來存儲(chǔ)社區(qū)的所有數(shù)據(jù)。然后,您將創(chuàng)建Profile(個(gè)人資料)、NeighborHood(社區(qū))、Business(企業(yè))和Post(帖子)等模型。想創(chuàng)建模型,必須確定數(shù)據(jù)庫表所需的關(guān)系。

二、一對(duì)一數(shù)據(jù)庫關(guān)系

一對(duì)一關(guān)系意味著一個(gè)Django模型中的記錄與另一個(gè)模型中的另一個(gè)記錄相關(guān)聯(lián)。這兩個(gè)記錄相互依賴。在這種情況下,Profile模型依賴User模型來創(chuàng)建居民的個(gè)人資料。

因此,每個(gè)在該應(yīng)用程序上注冊(cè)的居民只能有一份個(gè)人資料。此外,沒有用戶,個(gè)人資料就沒法存在。

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中內(nèi)置的驗(yàn)證模型,不必為它創(chuàng)建一個(gè)模型。相反,從django.contrib.auth中導(dǎo)入它。Profile模型上的OneToOneField()定義了一對(duì)一關(guān)系。

on_delete=models.CASCADE變量防止刪除其中一條記錄。您必須從兩個(gè)表中刪除記錄。

您可以使用Django管理界面在應(yīng)用程序中直觀顯示這些關(guān)系。想登錄到Django管理界面,必須注冊(cè)一個(gè)管理員用戶,即超級(jí)用戶。

在終端運(yùn)行以下命令,創(chuàng)建一個(gè)超級(jí)用戶:python manage.py createsuperuser

將提示您輸入用戶名、電子郵件和密碼。完成這些操作后,啟動(dòng)服務(wù)器。

在瀏覽器中使用URL http://127.0.0.1:8000/admin,打開管理頁面。

您將看到管理頁面,可以使用之前創(chuàng)建的憑據(jù)來登錄。登錄后,您將看到Groups對(duì)象和Users對(duì)象。Django身份驗(yàn)證框架管理這兩個(gè)模型。在底部,您將看到Profile模型。

打開Profile模型,繼續(xù)添加個(gè)人資料。您看到它如下所示:

圖片

圖1

注意,您可以選擇為用戶創(chuàng)建個(gè)人資料。OneToOneField()數(shù)據(jù)類型讓您可以為經(jīng)過身份驗(yàn)證的用戶創(chuàng)建個(gè)人資料。這就是該應(yīng)用程序管理一對(duì)一關(guān)系的方式。

三、一對(duì)多數(shù)據(jù)庫關(guān)系

一對(duì)多關(guān)系意味著模型中的一條記錄與另一個(gè)模型中的多條記錄相關(guān)聯(lián),它也被稱為多對(duì)一關(guān)系。

在本例中,一個(gè)管理員可以創(chuàng)建多個(gè)社區(qū)。但每個(gè)社區(qū)只能屬于一個(gè)管理員。您可以使用ForeignKey數(shù)據(jù)類型來定義這類關(guān)系。

Django有內(nèi)置的管理界面,不必為它創(chuàng)建一個(gè)模型。管理員有權(quán)從管理面板管理內(nèi)容和直觀顯示該應(yīng)用程序。

容納許多記錄的模型將擁有ForeignKey。它將關(guān)系定義為一對(duì)多關(guān)系。下列代碼顯示了將密鑰放在哪里。

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'

您可以在該應(yīng)用程序上看到如下圖所示的關(guān)系:

圖片

圖2

NeighborHood模型現(xiàn)在有一個(gè)管理員。任何人想創(chuàng)建一個(gè)社區(qū),都必須擁有管理權(quán)限。一個(gè)社區(qū)不能擁有多名管理員。

四、多對(duì)多數(shù)據(jù)庫關(guān)系

在多對(duì)多關(guān)系中,一個(gè)模型中的多個(gè)記錄與另一個(gè)模型中的其他記錄相關(guān)聯(lián)。比如說,Post模型和Business模型可以擁有彼此的多個(gè)記錄。用戶可以在他們的帖子中創(chuàng)建多個(gè)商業(yè)廣告,反之亦然。

然而,創(chuàng)建多對(duì)多關(guān)系可能導(dǎo)致數(shù)據(jù)不準(zhǔn)確。在其他框架中,您必須創(chuàng)建一個(gè)新表來連接這兩個(gè)表。

為此,Django有一個(gè)解決辦法。當(dāng)您使用多對(duì)多字段時(shí),它將創(chuàng)建一個(gè)新表將兩個(gè)表映射到一起。您可以將多對(duì)多字段放到兩個(gè)模型中的任意一個(gè)中,但不應(yīng)該同時(shí)放在兩個(gè)模型中。

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'

現(xiàn)在,當(dāng)您在管理面板上查看Post模型時(shí),可以將幾家企業(yè)附加到一個(gè)帖子上。

圖片

圖3

五、Django簡化數(shù)據(jù)庫關(guān)系

為應(yīng)用程序使用的數(shù)據(jù)庫類型決定了如何利用數(shù)據(jù)。Django有一個(gè)全面的系統(tǒng),使連接和操作關(guān)系數(shù)據(jù)庫變得很容易。

Django的特性使得從相關(guān)表中存儲(chǔ)和檢索數(shù)據(jù)變得很容易。它有內(nèi)置的API,可以為應(yīng)用程序連接和創(chuàng)建數(shù)據(jù)庫關(guān)系。

數(shù)據(jù)庫關(guān)系決定著應(yīng)用程序的行為。使用一對(duì)一關(guān)系、一對(duì)多關(guān)系還是多對(duì)多關(guān)系,則取決于您自己。

使用Django,您可以在不破壞應(yīng)用程序的情況下配置和測(cè)試特性。可以使用Django來保護(hù)數(shù)據(jù)庫系統(tǒng),并優(yōu)化開發(fā)者體驗(yàn)。

原文鏈接:https://www.makeuseof.com/django-database-relationships/

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2011-07-18 09:54:47

云計(jì)算分片關(guān)系數(shù)據(jù)庫關(guān)系數(shù)據(jù)庫

2011-06-07 17:14:15

關(guān)系型數(shù)據(jù)庫壓縮技術(shù)

2011-03-15 11:19:45

DB2數(shù)據(jù)庫catalog

2011-03-24 17:49:47

數(shù)據(jù)庫恢復(fù)

2021-09-06 10:24:12

鴻蒙HarmonyOS應(yīng)用

2011-10-11 17:07:12

數(shù)據(jù)庫Internet文件數(shù)據(jù)庫

2020-03-14 16:37:09

數(shù)據(jù)庫IT技術(shù)

2009-03-26 09:58:55

云計(jì)算關(guān)系型數(shù)據(jù)庫關(guān)系數(shù)據(jù)庫

2011-04-13 16:13:53

云計(jì)算關(guān)系型數(shù)據(jù)庫

2010-09-15 14:09:01

GraphDataba

2021-09-03 15:41:00

鴻蒙HarmonyOS應(yīng)用

2024-06-06 16:50:15

2023-10-16 13:26:00

RDBMS關(guān)系數(shù)據(jù)庫

2018-07-18 09:16:39

關(guān)系型非關(guān)系型數(shù)據(jù)庫

2010-04-15 12:53:42

Oracle數(shù)據(jù)庫

2016-08-23 14:25:19

MySQL約束數(shù)據(jù)庫

2011-04-14 09:46:12

DB2數(shù)據(jù)庫catalog

2020-05-07 18:39:15

數(shù)據(jù)庫閉源開源

2018-03-26 12:58:52

數(shù)據(jù)庫OracleMySQL

2011-05-13 13:38:49

數(shù)據(jù)庫對(duì)象
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品成人一区 | 欧美一级免费看 | 日韩欧美国产一区二区三区 | 黄色大片免费看 | 国产精品一区在线观看你懂的 | 91视频.| 久久久久久亚洲国产精品 | 粉嫩一区二区三区性色av | 久久成人精品视频 | www网站在线观看 | 99精品欧美一区二区蜜桃免费 | www.国产一区 | 久久精品亚洲精品国产欧美kt∨ | 欧美一级一区 | 黑人一级片视频 | 亚洲国产成人精品女人久久久 | 男女激情网 | 成人在线a | 中文字幕日本一区二区 | 天天色影视综合 | 亚洲色图综合 | av午夜激情 | 国产三级 | 亚洲热在线视频 | 国产精品69毛片高清亚洲 | 国产高清免费视频 | 色综合99| 欧洲亚洲一区二区三区 | 亚洲一区二区三区观看 | 精品免费国产视频 | av网站观看 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 日韩免费视频一区二区 | 久久这里只有精品首页 | 午夜视频在线播放 | 日本精品在线播放 | 欧美日韩电影免费观看 | 在线播放一区二区三区 | 激情毛片 | 亚洲视频1区 | 麻豆精品一区二区三区在线观看 |