Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu.

Andmebaasi seos kirjeldab seost erinevate andmebaasitabelite vahel. Seosed määravad, kuidas andmeid salvestada ja hankida. Django töötab hästi relatsiooniliste andmebaasisüsteemidega (RDBMS). Seetõttu toetab see andmebaasi tabelite seoseid.

Seoste tüübid sõltuvad teie rakenduse nõuetest ja selle modelleeritud andmetest. Head suhted Django mudelite ja andmebaasi vahel parandavad andmete hooldamist. See hõlmab päringu jõudluse parandamist ja andmete dubleerimise vähendamist.

Saate teada, kuidas Django andmebaasi seosed rakenduse jõudlust mõjutavad, uurides kolme peamist seose tüüpi.

Andmebaasi suhted

Relatsioonilised andmebaasisüsteemid toetavad kolme tüüpi andmebaasisuhteid. Need suhted on üks-mitmele, mitu-mitmele ja üks-ühele. Andmebaasi seose tüüp mõjutab teie rakenduse kasutusjuhtumeid.

Django mudelid esindavad rakenduses andmebaasitabeleid. Hea andmebaasisüsteemi loomiseks peate looma head suhted tabelite vahel. Andmebaasi seosed määravad, kuidas teie rakenduses andmeid salvestada ja esitada.

instagram viewer

Andmebaasi suhete mõistmiseks alustage Django projekti loomine nimega Kapuutsid. Rakendus on naabruskonna sotsiaalvõrgustik. See haldab erinevate linnaosade sotsiaalseid tegevusi, turvalisust ja ettevõtteid.

Elanikud saavad registreeruda, sisse logida ja profiile luua. Samuti saavad nad luua postitusi ja ärikuulutusi, mida kõik näevad.

Alustamiseks looge andmebaas, mis salvestab kõik naabruskonna andmed. Seejärel loote profiili-, naabruskonna-, ettevõtte- ja postitusmudelid. Mudelite loomiseks peate määrama seose, mida andmebaasi tabelid vajavad.

Üks-ühele andmebaasi suhe

Üks-ühele suhe tähendab, et ühes Django mudelis olev kirje on seotud teise kirjega teises mudelis. Need kaks rekordit sõltuvad üksteisest. Sel juhul on Profiili mudel oleneb sellest Kasutaja mudel elanike profiilide loomiseks.

Seega saab iga rakenduses registreeritud elaniku kohta olla ainult üks profiil. Samuti ei saa ilma kasutajata profiili eksisteerida.

alates django.db importida mudelid
alatesdjango.panus.auth.mudelidimportidaKasutaja

klassProfiil(mudelid. mudel):
kasutaja = mudelid. OneToOneField (kasutaja, on_delete=mudelid. CASCADE, seotud_nimi='profiil')
nimi = mudelid. CharField (max_length=80, tühi=Tõsi)
bio = mudelid. Tekstiväli (max_length=254, tühi=Tõsi)
profile_picture = CloudinaryField('profiili pilti', vaikimisi='default.png')
asukoht = mudelid. CharField (max_length=50, tühi=Tõsi, null=Tõsi)
email = mudelid. EmailField(null=Tõsi)

def__str__(ise):
tagasi f'{ise.user.username} profiil"

Django kasutajamudel on Django sisseehitatud autentimismudel. Sa ei pea selle jaoks mudelit looma. Selle asemel importige see kohast django.contrib.auth. The OneToOneField() peal Profiili mudel määratleb üks-ühele suhte.

The on_delete=mudelid. KASKAAD argument takistab ühe neist kirjetest kustutamist. Peate mõlemast tabelist kirjed kustutama.

Saate kasutada Django administraatoriliidest, et visualiseerida seost oma rakenduses. Django adminisse sisselogimiseks peate registreeruma administraatori kasutajaks, mida tuntakse a superkasutaja.

Looge superkasutaja, käivitades terminalis järgmise käsu:

püütonhallata.pyloo superkasutaja

Kuvatakse viip oma kasutajanime, e-posti aadressi ja parooli sisestamiseks. Kui olete seda teinud, käivitage server.

Avage URL-i abil brauseris administraatori leht http://127.0.0.1:8000/admin.

Näete administraatori lehte, kuhu saate varem loodud mandaatidega sisse logida. Kui olete sisse loginud, näete Rühmad ja Kasutajad objektid. Django autentimisraamistik haldab neid kahte mudelit. Allosas näete Profiili mudel.

Ava Profiil mudel ja jätkake profiili lisamisega. Näete, et see näeb välja järgmiselt:

Pange tähele, et teil on võimalus luua kasutajale profiil. Andmetüüp OneToOneField() võimaldab luua autentitud kasutajatele profiile. Nii haldab rakendus üks-ühele suhteid.

Üks-mitmele suhted

Üks-mitmele suhe tähendab, et mudeli üks kirje seostub paljude teise mudeli kirjetega. Seda nimetatakse ka mitme-ühele suhteks.

Teie puhul saab üks administraator luua mitu naabruskonda. Kuid iga naabruskond võib kuuluda ainult ühele administraatorile. Sellise seose määratlemiseks saate kasutada andmetüüpi ForeignKey.

Djangol on sisseehitatud administraatoriliides. Sa ei pea selle jaoks mudelit looma. Administraatoril on õigus administraatori paneelilt sisu hallata ja rakendust visualiseerida.

Mudelil, mis mahutab palju rekordeid, on Välisvõti. See määratleb suhet üks-mitmele. Allolev kood näitab, kuhu võti asetada.

klassNaabruskond(mudelid. mudel):
admin = mudelid. ForeignKey("Profiil", on_delete=mudelid. CASCADE, seotud_nimi='kapuuts')
nimi = mudelid. CharField (max_length=50)
asukoht = mudelid. CharField (max_length=60)
hood_logo = CloudinaryField('hood_logo', vaikimisi='default.png')
kirjeldus = mudelid. Tekstiväli()
tervis_tell = mudelid. IntegerField(null=Tõsi, tühi=Tõsi)
politsei_number = mudelid. IntegerField(null=Tõsi, tühi=Tõsi)
Count = mudelid. IntegerField(null=Tõsi, tühi=Tõsi)

def__str__(ise):
tagasi f'{ise.name} kapuuts'

Näete rakenduses suhet, nagu on näidatud pildil:

The Naabruskond mudelil on nüüd administraator. Et igaüks saaks naabruskonna luua, peavad tal olema administraatori õigused. Ja ühel naabruskonnal ei saa olla palju administraatoreid.

Paljud-mitmele andmebaasisuhted

Mitu-mitmele suhetes seostuvad paljud ühe mudeli kirjed teistega teises. Näiteks Postita ja Äri mudelitel võib olla mitu üksteise kirjet. Kasutajad saavad oma postitustesse teha mitu ärikuulutust ja vastupidi.

Mitu-mitmele suhete loomine võib aga põhjustada ebatäpseid andmeid. Teistes raamistikes peaksite kahe tabeli ühendamiseks looma uue tabeli.

Djangol on sellele lahendus. Kui kasutate välja mitu-mitmele, loob see uue tabeli, mis ühendab kaks tabelit. Välja palju-mitmele saate lisada mõlemale mudelile, kuid see ei tohiks olla mõlemas mudelis.

klassPostita(mudelid. mudel):
pealkiri = mudelid. CharField (max_length=120, null=Tõsi)
postitus = mudelid. Tekstiväli()
kuupäev = mudelid. DateTimeField (auto_now_add=Tõsi)
kasutaja = mudelid. ForeignKey (profiil, on_delete=mudelid. CASCADE, seotud_nimi='postitus_omanik')
kapuuts = mudelid. ForeignKey (NeighbourHood, on_delete=models. CASCADE, seotud_nimi='hood_post')
äri = mudelid. ManyToManyField (äri)

def__str__(ise):
tagasi f'{ise.title} postitus"

Nüüd, kui vaatate Postita mudeli administraatoripaneelil, saate ühele postitusele lisada mitu ettevõtet.

Django lihtsustab andmebaasisuhteid

Andmebaasi tüüp, mida oma rakenduse jaoks kasutate, määrab, kuidas andmeid kasutada. Djangol on terviklik süsteem, mis muudab relatsiooniandmebaaside ühendamise ja kasutamise lihtsaks.

Django funktsioonid muudavad seotud tabelite andmete salvestamise ja toomise lihtsaks. Sellel on sisseehitatud API-d, mis ühendavad ja loovad teie rakenduse jaoks andmebaasisuhteid.

Andmebaasisuhted määravad teie rakenduse käitumise. See, kas kasutate üks-ühele, üks-mitmele või mitu-mitmele suhteid, sõltub teist.

Django abil saate funktsioone konfigureerida ja testida ilma rakendust rikkumata. Kasutage Djangot andmebaasisüsteemide turvamiseks ja oma arendajakogemuse optimeerimiseks.