Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Marthyn
Člen
Avatar
Marthyn:7.4.2015 22:31

Poradí někdo jak se dá nastavit parcialita v MySQL potažmo phpMyAdmin?

Jde mi o to, že bych rád vytvořil pomocí cizího klíče vztah 1:0(N) mezi tabulkami.

Příklad: Jeden člověk může být majitelem jednoho nebo více aut, ale zároveň nemusí být majitelem žádného.

Zkoušel jsem povolit u daného indexu aby mohl mýt nulový, ale nepomohlo. (Odkoukáno z MySQL Workbench).

Má někdo nějaký návrh jak na to? Díky

Editováno 7.4.2015 22:31
 
Odpovědět
7.4.2015 22:31
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Marthyn
David Hartinger:7.4.2015 22:45

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.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
7.4.2015 22:45
You are the greatest project you will ever work on.
Avatar
shaman
Člen
Avatar
Odpovídá na Marthyn
shaman:8.4.2015 0:50

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.

Nahoru Odpovědět
8.4.2015 0:50
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Odpovídá na shaman
Martin Konečný (pavelco1998):8.4.2015 12:02

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.

Nahoru Odpovědět
8.4.2015 12:02
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
d4rkw34v3r
Tvůrce
Avatar
d4rkw34v3r:8.4.2015 12:07

Ty si někdy dával jako identifikator záporný číslo? :-)

 
Nahoru Odpovědět
8.4.2015 12:07
Avatar
shaman
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
shaman:8.4.2015 14:59

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.

Nahoru Odpovědět
8.4.2015 14:59
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Odpovídá na shaman
Martin Konečný (pavelco1998):8.4.2015 15:28

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.

Nahoru Odpovědět
8.4.2015 15:28
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na shaman
Michal Štěpánek:8.4.2015 16:51

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...

Nahoru Odpovědět
8.4.2015 16:51
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
shaman
Člen
Avatar
Odpovídá na Michal Štěpánek
shaman:8.4.2015 17:30

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.

Nahoru Odpovědět
8.4.2015 17:30
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Marthyn
Člen
Avatar
Odpovídá na David Hartinger
Marthyn:8.4.2015 21:01

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.

 
Nahoru Odpovědět
8.4.2015 21:01
Avatar
Marthyn
Člen
Avatar
Odpovídá na Marthyn
Marthyn:8.4.2015 21:35

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?

 
Nahoru Odpovědět
8.4.2015 21:35
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.