Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo.

Relacija baze podatkov opisuje povezavo med različnimi tabelami baze podatkov. Relacije določajo, kako shranjevati in pridobivati ​​podatke. Django dobro deluje s sistemi relacijskih baz podatkov (RDBMS). Zato podpira relacije tabel baze podatkov.

Vrste relacij so odvisne od zahtev vaše aplikacije in podatkov, ki jih modelira. Dobri odnosi med modeli Django in bazo podatkov izboljšajo vzdrževanje podatkov. To vključuje izboljšanje zmogljivosti poizvedb in zmanjšanje podvajanja podatkov.

Kako razmerja baze podatkov Django vplivajo na zmogljivost aplikacije, se lahko naučite tako, da raziščete tri glavne vrste razmerij.

Odnosi med bazo podatkov

Sistemi relacijskih baz podatkov podpirajo tri vrste relacij baz podatkov. Ta razmerja so ena proti mnogo, veliko proti mnogo in ena proti ena. Vrsta relacije baze podatkov vpliva na primere uporabe vaše aplikacije.

Django modeli

instagram viewer
predstavljajo tabele baze podatkov v aplikaciji. Ustvariti morate dobre odnose med tabelami, da ustvarite dober sistem baze podatkov. Relacije baze podatkov določajo, kako shraniti in predstaviti podatke v vaši aplikaciji.

Če želite razumeti odnose med zbirkami podatkov, začnite z ustvarjanje projekta Django imenovan Nape. Aplikacija bo socialno omrežje soseske. Upravljal bo različne družbene dejavnosti sosesk, varnost in podjetja.

Prebivalci se lahko registrirajo, prijavijo in ustvarijo profile. Ustvarijo lahko tudi objave in poslovne oglase, ki jih lahko vidijo vsi.

Za začetek ustvarite bazo podatkov, ki bo shranjevala vse podatke o soseski. Nato boste ustvarili modele Profile, NeighborHood, Business in Post. Če želite ustvariti modele, morate določiti razmerje, ki ga potrebujejo tabele baze podatkov.

Razmerje med bazo podatkov ena proti ena

Razmerje ena proti ena pomeni, da je zapis v enem modelu Django povezan z drugim zapisom v drugem modelu. Oba zapisa sta odvisna drug od drugega. V tem primeru je Model profila odvisno od Uporabniški model za ustvarjanje rezidenčnih profilov.

Tako je lahko samo en profil za vsakega prebivalca, registriranega v aplikaciji. Poleg tega brez uporabnika profil ne more obstajati.

od django.db uvoz modeli
oddjango.contrib.auth.modeliuvozUporabnik

razredProfil(modeli. model):
uporabnik = modeli. OneToOneField (Uporabnik, on_delete=modeli. CASCADE, sorodno_ime='profil')
ime = modeli. CharField (max_length=80, prazno=Prav)
bio = modeli. TextField (max_length=254, prazno=Prav)
slika_profila = CloudinaryField('profilna slika', privzeto='default.png')
lokacija = modeli. CharField (max_length=50, prazno=Prav, nič=Prav)
e-pošta = modeli. EmailField(nič=Prav)

def__str__(sebe):
vrnitev f'{sebeprofil .user.username}

Djangov uporabniški model je vgrajen model preverjanja pristnosti v Djangu. Za to vam ni treba ustvariti modela. Namesto tega ga uvozite iz django.contrib.auth. The OneToOneField() na Model profila definira razmerje ena proti ena.

The on_delete=modeli. KASKADA argument preprečuje izbris enega od teh zapisov. Morate izbrisati zapise iz obeh tabel.

S skrbniškim vmesnikom Django lahko vizualizirate razmerje v svoji aplikaciji. Če se želite prijaviti v Django admin, se morate registrirati kot skrbniški uporabnik, znan kot a superuporabnik.

Ustvarite superuporabnika tako, da na terminalu zaženete naslednji ukaz:

pythonupravljati.pycreatesuperuser

Prikazal se bo poziv za vnos uporabniškega imena, e-pošte in gesla. Ko to storite, zaženite strežnik.

Odprite skrbniško stran v brskalniku z uporabo URL-ja http://127.0.0.1:8000/admin.

Videli boste skrbniško stran, kjer se lahko prijavite s poverilnicami, ki ste jih ustvarili prej. Ko se prijavite, boste videli Skupine in Uporabniki predmetov. Ogrodje za preverjanje pristnosti Django upravlja ta dva modela. Na dnu boste videli Model profila.

Odprite Profil model in nadaljujte z dodajanjem profila. Videli boste, da se prikaže takole:

Upoštevajte, da imate možnost ustvariti profil za uporabnika. Podatkovni tip OneToOneField() omogoča ustvarjanje profilov za overjene uporabnike. Tako aplikacija upravlja razmerja ena proti ena.

Razmerja ena proti mnogo

Razmerje eden proti mnogo pomeni, da je en zapis v modelu povezan s številnimi zapisi v drugem modelu. Imenuje se tudi razmerje več proti ena.

V vašem primeru lahko en skrbnik ustvari več sosesk. Toda vsaka soseska lahko pripada samo enemu skrbniku. Za definiranje takega razmerja lahko uporabite podatkovni tip ForeignKey.

Django ima vgrajen skrbniški vmesnik. Za to vam ni treba ustvariti modela. Administrator ima pravico upravljati vsebino in vizualizirati aplikacijo iz skrbniške plošče.

Model, ki sprejme veliko zapisov, bo imel Tuji ključ. Odnos definira kot enega proti mnogo. Spodnja koda prikazuje, kam postaviti ključ.

razredsoseska(modeli. model):
admin = modeli. Tuji ključ("Profil", on_delete=modeli. CASCADE, sorodno_ime='napa')
ime = modeli. CharField (max_length=50)
lokacija = modeli. CharField (max_length=60)
hood_logo = CloudinaryField('hood_logo', privzeto='default.png')
opis = modeli. TextField()
zdravje_tell = modeli. IntegerField(nič=Prav, prazno=Prav)
policijska_številka = modeli. IntegerField(nič=Prav, prazno=Prav)
Število = modelov. IntegerField(nič=Prav, prazno=Prav)

def__str__(sebe):
vrnitev f'{sebe.name} napa'

Razmerje v aplikaciji si lahko ogledate, kot je prikazano na sliki:

The NeighborHood model ima zdaj skrbnika. Če želi vsak ustvariti sosesko, mora imeti skrbniške pravice. In ena soseska ne more imeti veliko skrbnikov.

Relacije baz podatkov mnogo proti mnogo

V razmerjih mnogo proti mnogo se številni zapisi v enem modelu povezujejo z drugimi v drugem. Na primer, Objavi in Posel modeli imajo lahko več zapisov drug o drugem. Uporabniki lahko v svojih objavah objavijo več poslovnih oglasov in obratno.

Vendar lahko ustvarjanje relacij veliko proti mnogo vodi do netočnih podatkov. V drugih okvirih bi morali ustvariti novo tabelo, da bi združili obe tabeli.

Django ima rešitev za to. Ko uporabite polje »mnogo proti mnogo«, ustvari novo tabelo, ki obe tabeli preslika skupaj. Polje »mnogo proti mnogo« lahko vstavite v katerega koli od obeh modelov, vendar ne bi smelo biti v obeh modelih.

razredObjavi(modeli. model):
naslov = modeli. CharField (max_length=120, nič=Prav)
post = modeli. TextField()
datum = modeli. DateTimeField (auto_now_add=Prav)
uporabnik = modeli. ForeignKey (profil, on_delete=modeli. CASCADE, sorodno_ime='lastnik objave')
napa = modeli. ForeignKey (NeighbourHood, on_delete=modeli. CASCADE, sorodno_ime='hood_post')
posel = modeli. ManyToManyField (posel)

def__str__(sebe):
vrnitev f'{sebe.title} objava'

Zdaj, ko si ogledate Objavi modela na skrbniški plošči, lahko na eno objavo pripnete več podjetij.

Django poenostavlja odnose med zbirkami podatkov

Vrsta baze podatkov, ki jo uporabljate za svojo aplikacijo, določa, kako izkoristiti podatke. Django ima celovit sistem, ki omogoča preprosto povezovanje in upravljanje relacijskih baz podatkov.

Funkcije Django olajšajo shranjevanje in pridobivanje podatkov iz povezanih tabel. Ima vgrajene API-je, ki povezujejo in ustvarjajo relacije baze podatkov za vašo aplikacijo.

Odnosi med bazo podatkov določajo obnašanje vaše aplikacije. Od vas je odvisno, ali boste uporabljali razmerja ena proti ena, ena proti mnogo ali veliko proti mnogo.

Z Django lahko konfigurirate in preizkusite funkcije, ne da bi poškodovali svojo aplikacijo. Uporabite Django za zaščito sistemov baz podatkov in optimizirajte svojo izkušnjo razvijalca.