Databáze > Obecné

Cudzí kľúč verzus join

(1/2) > >>

Stanislav Hruška:
Snažím sa urobiť program pre správu SVB. Moja úvaha bola:

"Vždy budem robiť s konkrétnym SVB. Preto v niektorých prípadoch je pre mňa jednoduchšie dať do tabuľky cudzí kľúč FKSVB, než vytvárať join cez niekoľko tabuliek."

K tomu pristupuje aj filtrovanie tabuliek. Napr. ak chcem vybrať byty v danom SVB, tak mi stačí nastaviť na tabuľke BYTY.Filter := 'FKSVB=xy';
Tak som si FKSVB nahádzal do všetkých tabuliek. Viem, že to porušuje pravidlá relačnej DB (norma...?).

Je moja úvaha opodstatnená, alebo
  1) mám vždy tvrdo pracovať s join 
  2) použiť kompromis a FKSVB definovať len tam kde sa využije. Len neviem ako to bude v budúcnosti.

Ďakujem za názory.

pf1957:

--- Citace: Stanislav Hruška  27-04-2015, 15:57:55 ---"Vždy budem robiť s konkrétnym SVB. Preto v niektorých prípadoch je pre mňa jednoduchšie dať do tabuľky cudzí kľúč FKSVB, než vytvárať join cez niekoľko tabuliek."

--- Konce citace ---
Vubec ti nerozumim ;-)

Byt prece muze v dany okamzik patrit jednomu SVB, takze ma relaci OneToMany, kterou udelas tak, ze das k bytu FK na SVB
a takova data skutecne zapises do DB.

Pri dotazu pokud znas hodnotu toho FK, tak ti staci napsat where FK=:FK, jinak musis to SVB pripojit joinem...

Stanislav Hruška:
Trocha to rozpíšem. Ten byt je celkom dobrý príklad. Štruktúra/väzby je
SVB -> Blok -> Vchod -> Byt.

Nedám do tabuľky BYT cudzí kľúč FKSVB. Musím vytvoriť SQL/Pohľad a použiť join spätne až k Tabuľke SVB (3 kusy) a potom WHERE IDSVB = xy. Prísne dodržiavam normalizáciu. V niektorých prípadoch ten join môže byť celkom zložitý.

Z môjho pohľadu je jednoduchšie nadefinovať si FKSVB. Až taký veľký nárast DB to nespôsobí. Vzhľadom na skutočnosť, že neviem čo bude zajtra, tak som to natrepal všade.

Mi.Chal.:

--- Citace: Stanislav Hruška  27-04-2015, 16:17:23 ---Z môjho pohľadu je jednoduchšie nadefinovať si FKSVB. Až taký veľký nárast DB to nespôsobí. Vzhľadom na skutočnosť, že neviem čo bude zajtra, tak som to natrepal všade.

--- Konce citace ---

Jakože SVB máš ve třech tabulkách (blok, vchod, byt) místo v jedné? To je blbě z hlediska návrhu db, z hlediska praxe se to může dělat pokud člověk narazí na problém s výkonem. Nicméně pochybuji, že někde provozujete systém s miliony záznamů, aby se to vůbec projevilo. Kolik dat tam reálně máte? V joinu přes pár tabulek bych problém neviděl. Jestli je jediný důvod to, že jsi líný to tam psát, tak bych to nedělal.

Ještě budeš mít problém, pokud bys chtěl měnit id SVB, pak bys to musel změnit ve všech tabulkách. Ale to prakticky asi dělat nebudeš...

Stanislav Hruška:

--- Citace ---Jakože SVB máš ve třech tabulkách (blok, vchod, byt) místo v jedné?
--- Konce citace ---
Ak tým myslíš FKSVB (cudzí kľúč), tak áno. Samotné údaje nikde nezdvojujem!

--- Citace ---To je blbě z hlediska návrhu db
--- Konce citace ---
Preto som založil tému.

--- Citace ---Nicméně pochybuji, že někde provozujete systém s miliony záznamů, aby se to vůbec projevilo.
--- Konce citace ---
To naozaj nehrozí. Teraz mi ide čiste o metodiku.

--- Citace ---Jestli je jediný důvod to, že jsi líný to tam psát, tak bych to nedělal.

--- Konce citace ---
Skoro  :), ale

* môže to byť zložité
* nepracujem priamo s tabuľkou. Filter áno
* vždy si musím vytvoriť nejaký dataset
* Ak budem chcieť hromadne spracovať nejaké údaje za SVB, tak mi stačí použiť FKSVB v patričnej/ých tabuľke
--- Citace ---Ještě budeš mít problém, pokud bys chtěl měnit id SVB, pak bys to musel změnit ve všech tabulkách. Ale to prakticky asi dělat nebudeš...
--- Konce citace ---
To neprichádza do úvahy! Buď tam SVB bude "komplet", alebo nič. Mám v pláne, od určitého stupňa zadania údajov, namiesto vymazania údajov použiť príznak vymazania.

Mám dojem, že som si to náležite vysvetlil. Kloním sa k

--- Citace --- 2) použiť kompromis a FKSVB definovať len tam kde sa využije.
--- Konce citace ---

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi