Autor Zpráva
kajaman
Profil
Ahoj všem, řeším takovou teoretickou otázku. Řekněme, že mám tabulky:
OSOBY(id int, nick varchar(20), ....
PRISPEVKY(id int, autor ??

Je lepší ukládat si do tabulky PRISPEVKY jako odkaz na autora jeho "id" nebo jeho "nick"? Když použiju nick, bude to asi datově objemnější, ale zase nebudu třeba při vyhledávání spojovat tabulky = rychlejší a když využiju foreign key, tak při změně nicku se mi změna promítne i do tabulky PRISPEVKY.
Když použiju id, bude to datově menší tabulka, nebude tam ta redundance, ale zase budu muset při vyhledávání spojit ty tabulky = pomalejší...

Děkuju za názory - nebo přímo "jak se to dělá v praxi".
nightfish
Profil
osobně bych použil normalizovanou variantu, tzn. odkazovat pomocí id
a problémy s rychlostí řešit až v případě, že se ukáže tato varianta jako velmi pomalá
Mastodont
Profil
kajaman
Na tuto otázku neexistuje jednoznačná odpověď. Jestli umíš anglicky, tak si v Googlu zadej "surrogate+natural+keys" a můžeš začít číst :-)

Viz třeba
http://decipherinfosys.wordpress.com/2007/02/01/surrogate-keys-vs-natural-keys-for-primary-key/
Anebo Joe Celko (považován obecně za kapacitu v SQL):
http://intelligent-enterprise.informationweek.com/channels/business_intelligence/showArticle.jhtml?articleID=201806814
kajaman
Profil
Mastodont
díky, ale asi jsi nechytil přesně moji otázku. Já teď neřeším jestli surrogate nebo natural keys pro PK. Ptal jsem se na Foreign key - jestli uchovávat v tabulce PRISPEVKY přímo "nick" autora (který mě bude zajímat při zobrazení příspěvku) a nechat narůstat data v tabulce PRISPEVKY, nebo jestli odkazovat na "id" v tabulce OSOBY a nick si dohledat JOINem - a zpomalit vyhledávání. Za prvé obecně a za druhé pokud například odhadnu velikost tabulek OSOBY cca stovky záznamů a příspěvky cca tisíce záznamů...
Aesir
Profil
kajaman:
Za prvé obecně a za druhé pokud například odhadnu velikost tabulek OSOBY cca stovky záznamů a příspěvky cca tisíce záznamů...

Tak to se o rychlost nemusíte bát snad na žádné běžně používané databázi, joiny přes PK jsou hodně rychlé a velmi dobře optimalizované.
Joker
Profil
kajaman:
Je lepší ukládat si do tabulky PRISPEVKY jako odkaz na autora jeho "id" nebo jeho "nick"?
No, já bych použil primární klíč. Tj. je-li primární klíč ID, použil bych ID.
Když už by klíč byla přezdívka, nabízí se otázka, k čemu je vlastně v tabulce to ID (na téma co je lepší primární klíč viz Mastodont).

Argument proti použití přezdívky jako primárního klíče je, že to vpodstatě znemožní případnou změnu přezdívky a jednou zaregistrovaná přezdívka by teoreticky neměla už nikdy jít "odregistrovat" a použít znovu (čili se může stát, že po čase lidi budou muset používat podivné přezdívky jen proto, že ty "dobré" jsou už vybrané lidmi, kteří svůj účet už roky nepoužívají).

Stručně řečeno, jakmile nějaký sloupec použiju někde jako klíč, je případná manipulace s tím sloupcem problematická.
Mastodont
Profil
kajaman
Viz Joker, nechápu proč bych měl jako FK ukládat něco jiného než PK primární tabulky. Proto se tvůj problém redukuje na to, co dát jako PK.
kajaman
Profil
OK, děkuju za odpovědi.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: