Diskuze: Parcialita v MySQL
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Když povolíš NULLový, tak to normálně funguje. JEslti ti to nejde, tak tam máš nějaký vadný záznam, který má takový klíč, který se jako primární klíč v druhé tabulce nevyskytuje.
Foreign key musi byt uplne rovnaky typ ako index na ktory ho chces
naviazat.
Taktiez by mal byt null.
a nezabudni ho spravit aj unsigned ak to davas na klasicky numericky primary
key.
Dotaz - proč unsigned? Já si nikdy nezvykl dávat polde ID jako unsigned int. Mám pocit, že jsem někde naopak četl, že to může dělat problémy.
Ty si někdy dával jako identifikator záporný číslo?
auto increment je standardne 1 ak si ho nenastavis na ine (pozitivne) cislo. Taktiez sa neda v SQL nastavit negativne autoincrement. Dokonca nevidim zmysel preco. Phpmyadmin nepouzivam ale ine SQL klienty ti tam automaticky nastavia unsigned, aby si vedel ulozit viac riadkov.
Dovod? Ak mas integer id tak max hodnota je 2,147,483,647. Dve miliardy zapornych hodnot na id nikdy nevyuzijes. Ale s unsigned vies ulozit vyse 4 miliard moznych riadkov do tabulky.
Z toho dovodu, casto ked mi nejde nastavit foreign_key tak je problem prave unsigned.
Já vím, že díky unsigned se zvýší maximální kladná hodnota, ale
myslím, že jsem někde četl, že se to i přes to nedoporučuje, protože to
může dělat v něčem problémy.
Bohužel si už nepamatuji, kde jsem to četl, takže odkaz nemohu poslat.
Já naopak snad ani v žádných řešeních neviděl při vytváření tabulky, aby ID bylo unsigned, proto se ptám.
V podstatě by se s tím dalo souhlasit, ale upřímně: dokážeš si představit tabulku, kde jsou 4 miliardy záznamů? Abych pravdu řekl, já si nedokážu představit ani ty dvě miliardy, jak by se s tím pracovalo...
http://www.statisticbrain.com/…-statistics/ fejsbuk ma 1.3mld pouzivatelov treba sa fejsbuku opytat ci ich maju v autoincrement tabulke s unsigned, alebo uz o par rokov nebudu mat kde davat novych zakaznikov.
Pointa je ale od zaciatku v tom ze som chcel poukazat ze ak ti nejde nastavit foreign key tak moze byt aj toto problem.
Na zaver si skusme predstavit este tabulku ktora ma id nastavenu tinyinteger, teda od -127 do 128. Tam sa ti uz unsigned asi aj zide a budes vediet ulozit az 255 riadkov. To ale nie je pointa. Dalej si predstavme ze foreign key bude tiez tinyinteger ale nebude unsigned. Je jasne ze do riadku s rozsahom -127 az 128 nevies ukladat hodnoty s rozsahom 0 az 255, takze ti SQL proste vypise ze foreign key na tieto dve polia nevie nastavit.
Ano díky, mám tam někde nejspíš vadný záznam, protože v testovací tabulce vše funguje jak má.
Napadl mě ale ještě jedne poddotaz. Co když bych chtěl vytvořit vtah 0(1):0(N).
Když to uvedu zase na stejném příkladu, tak bych chtěl uvést že žádný člověk nemusí být majitelem auta, protože je majitelem firma.
Ve Workbench tato vazba jde nastavit, ale už tam nedokážu odkoukat co se změnilo v těch tabulkách, respektive to vypadá, že se nezměnilo nic.
Teď jsem se do toho zamotal, možná je škoda, že nejde najít článek který by se parcialitou zabýval a klidně by mohl rozvést myšlenku s unsigned...
V každém případě, pokud přemýšlím správně, tak vztah 0:N dostanu v mém případě, když vytvořím řádek automobil s NULLovým id_clovek. Takže možnost ve Workbench, slouží pouze jako možnost grafického znázornění. Mýlím se?
Zobrazeno 11 zpráv z 11.