Autor | Zpráva | ||
---|---|---|---|
slower Profil * |
Zdravím, jsem začátečník v Mysql,
potřeboval bych poradit s jednou tabulkou: CREATE TABLE `tbl_kosik` ( `kos_id` int(10) unsigned NOT NULL auto_increment, `kniha_id` int(10) unsigned NOT NULL default '0', `kos_pocet` mediumint(8) unsigned NOT NULL default '1', `kos_session_id` char(32) NOT NULL default '', `kos_datum` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`kos_id`), KEY `kniha_id` (`kniha_id`), KEY `kos_session_id` (`kos_session_id`) ) ENGINE=MyISAM AUTO_INCREMENT=58 ; může mi někdo prosím vysvětlit co znamená KEY ? je to cizí klíč ? Dočetl jsem se, že primární klíč může být v tabulce jen jeden, mám tu následující kód ve které jsou dva primární klíče a to dost nechápu... CREATE TABLE `tbl_offer_items` ( `offer_id` int(10) unsigned NOT NULL default '0', `cokolada_id` int(10) unsigned NOT NULL default '0', `offer_pocet` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`ob_id`,`kniha_id`) ) ENGINE=MyISAM; vidíte 2 primary key ? jakto ? Moderátor Kajman: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
|
||
Medvídek Profil |
#2 · Zasláno: 11. 5. 2012, 15:39:14
slower:
„vidíte 2 primary key ? jakto ?“ PRIMARY KEY je složen kombinací sloupců `ob_id`,`kniha_id` |
||
slower Profil * |
#3 · Zasláno: 11. 5. 2012, 15:42:59
aha,
a nevíš na co slouží KEY je to cizí klíč ? |
||
Kajman Profil |
#4 · Zasláno: 11. 5. 2012, 15:55:52
Ne, v tomto případě je to synonym pro vytvoření indexu nad tím sloupcem.
|
||
slower Profil * |
#5 · Zasláno: 11. 5. 2012, 16:02:23 · Upravil/a: slower
a k čemu mi to slouží ten index ?
tak už jsem to našel k čemu slouží ten index, pro lepší a rychlejší vyhledávání v databázi.... chci se ještě zeptat, mám tu hodně tabulek ve kterých jsou tedy primární klíče a tyhle indexi ale nevidím tu žádné cizí klíče ?? je to obchod a tedy nejsou tu žádné propojené tabulky, tak potom nechápu, proč se dělají relace mezi tabulkami ? když ten obchod funguje i bez nich.... Může mi někdo říct k čemu jsou tedy potom ty relace ? |
||
slower Profil * |
#6 · Zasláno: 11. 5. 2012, 17:55:17
Opravdu někdo nevíte kdy mohu použít cizí klíče pro spojení dvou nebo více tabulek ? a kdy je nemusím používat ?
protože mě aplikace jede i bez cizích klíčů a používám spojení inner join mezi tabulkami....a jak pak vypadá spojeni tabulek v MSSQL dotazu když tam mám cizí klíče ? Děkuji pan Bůh Vám to zaplať |
||
Tori Profil |
#7 · Zasláno: 11. 5. 2012, 18:17:33
slower:
„nevidím tu žádné cizí klíče“ Ty tabulky jsou typu MyISAM, který nepodporuje cizí klíče, na to by (u MySQL) byl potřeba typ InnoDB. Rozdíl je např. při mazání dat - u InnoDB si nadefinujete cizí klíče, a např. při smazání jednoho produktu (oblečení) se zároveň smažou i s ním související záznamy v jiné tabulce (např. dostupné velikosti/barvy). U MyISAM musíte výslovně specifikovat, že chcete smazat data i z té další tabulky (příkaz DELETE pro více tabulek, je to podobná syntax jako při spojování tabulek pro SELECT). Obecně, pokud máte např. tabulky a (id, název, ...) a související tab. b (id, id_a = vazba na tab.A, cizí klíč, ...) a používáte často dotaz SELECT * FROM a INNER JOIN b ON a.id = b.id_a , tak zřejmě máte primární klíče na sloupcích a.id a b.id, a přidáte si index i na sloupec b.id_a. Nalezení souvisejících řádků z obou tabulek se pak může řešit jen pomocí indexů, místo aby databáze porovnávala všechny položky z a se všemi z b, a dotaz se provede výrazně rychleji.
|
||
slower Profil * |
#8 · Zasláno: 11. 5. 2012, 18:27:37
Tori:
aha, já jsem nechápal rozdíl mezi spojování tabulek bez cizího klíče nebo s cizím klíčem, teď už to konečně chápu, že existuje i nějaký jiný typ tabulky jako je InnoDB pro spojení s cizím klíčem. Díkes |
||
Tori Profil |
#9 · Zasláno: 11. 5. 2012, 20:55:58
slower:
„rozdíl mezi spojování tabulek bez cizího klíče nebo s cizím klíčem“ Jsem to napsala asi trochu nejednoznačně. Cituji: „Cizí klíč: Sloupec nebo skupina sloupců v jedné tabulce, která odpovídá kandidátnímu klíči některé (případně téže) tabulky.“ (Conolly, Begg, Holowczak: Mistrovství - databáze, s. 67, CPress 2009) Existence cizích klíčů tedy nezávisí na použitém typu DB, ale vznikají během logického návrhu databáze a při spojování tabulek se používají (imho) v naprosté většině případů. Rozdíl je v tom, zda je konkrétní typ DB schopen "vnímat" související data z různých tabulek jako jediný celek (objekt) nebo ne. |
||
Časová prodleva: 12 let
|
0