Autor Zpráva
Nikson
Profil *
Zdravim,

vytvářím jakousi menší filmovou databázi a mám dvě tabulky Reziser a Film. Mezi nimi je vazba 1:N - film může režírovat pouze jeden režisér, ale režisér mohl režírovat N filmů.

Půjdu rovnou k otázce - jak toto propojení řešit ve formuláři kde se budou přidávat nové filmy? Napadli mě 2 možnosti.

1) Bude jednotný formulář kde se bude vyplňovat vše co se filmu týče (název filmu,rok natočení...) + bude selectovací tlačítko do kterého načtu všechny režiséry co mám v databázi a uživatel si pak jen vybere. Pro mě pohodlná verze na naprogramování, ale trochu mě děsí situace kdy bych měl v DB tisíce režisérů - nevim jestli by to pak neovlivnilo načítání stránek apod.

2) Na prvním formuláři se vyplní opět věci týkající se filmu, VYJMA režiséra - po odeslaní se uloží do session, ty si pošlu na další formulář kde bude vyhledávací pole - podle přijmení se vyhledají odpovídající režiséři a kliknutím na vyhledaného režiséra se vše uloží do db. To mi přijde takové kostrbaté, ale asi vhodnější - co myslíte?

Novým řešením se nebráním (pokud je pochopim :)). Jinak co se týče té odezvy - je mi jasné, že tam nikdy tolik režisérů mít nebudu, nicméně jde o školní projekt a dozajista (pokud by to vadilo) by tam tahle "co kdyby..." otázka padla.

Předem děkuju za jakékoliv rady :)
Someone
Profil
1) Co když budu přidávat film, jehož režisér ještě není v databázi?
3) Já bych to udělal nějak takhle:


2 tabulky v DB:

Režiséři
ID | Jmeno

Filmy
ID | Nazev | Id_rezisera

Udělal bych formulář, do kterého by se zadávalo jméno režiséra.
Po odeslání bych zkontroloval zda nějaký režisér s tímto jménem existuje.
existuje -> Získal bych jeho ID a vložil bych film do DB
neexistuje -> Vložil bych ho do tabulky režiséři, získal bych ID pomocí mysql_insert_id() a opět bych vložil film do DB.
Nikson
Profil *
No, myslel jsem že to udělám tak, že režisér prostě musí být dřív než film - ale máš pravdu, to není nejlepší - přidám možnost přidat režiséra při tvorbě filmu.

Jinak u toho řešení co mi navrhuješ by mi určitě vytkli dvě veči
1) Uživatel se překlikne a místo Cameron napíše Camero a bude tam mít hned dalšího (nechtěného) režiséra
2) Můžu mít v DB dva naprosto identické režiséry - povinné je u nich jen jméno,přijmení a rok narození. Pravděpodobnost, že toto nastane je fakt mizivá, ale z hlediska DB systému se to (dle mého) musí brát v potaz. Čili by mohla nastat situace, že budou vybráni dva režiséři na místo jednoho.
Someone
Profil
Tak přidávání režiséru udělej jako věc druhou a tohle bych normálně řešil přes Ajax, uživatel začne psát jméno režiséra a ty mu budeš z databáze navrhovat shody.
Nikson
Profil *
Když to je právě problém - ajax neumim. A navíc (a teď nevim jestli nekecám kraviny) když ho bude mít někdo vyplej tak mu to žádnou shodu nenajde, ne? Což je další podmínka - musí to být funkční i s vypnutým flashem/obrázky/jscriptem...
panther
Profil
Nikson:
když ho bude mít někdo vyplej tak mu to žádnou shodu nenajde, ne
když bude vyplý JS, tak hledání bude fungovat, nebude fungovat pouze našeptávač.

1) Uživatel se překlikne a místo Cameron napíše Camero a bude tam mít hned dalšího (nechtěného) režiséra
pokud se uklikne při vyhledávání, je to smůla. Když hledáš na googlu „hodinky“ a překlepneš se na „holínky“, taky je to smůla.

1) Můžu mít v DB dva naprosto identické režiséry
možná data je třeba brát nejen teoreticky, ale i prakticky. Režisérů mnoho není, a šance, že budou dvě shodná jména (ta je relativně vysoká) a datum narození, je téměř nulová. To je k tomu, že tato situace téměř jistě nenastane.

Ale, i když nastane, každý z těch „identických“ režisérů bude mít vlastní ID, kde je tedy problém? Návrh struktury DB v [#2] je správný.
NouF
Profil
1000 režisérů to je pro mysql prd, pokud to nebude fakt prasácky napsané.. Jestli se nepletu, tak do desítek milionů záznamu je vše v caiku.
Nikson
Profil *
panther
Ad identičtí režiséři
Šak ano, tak to mám řešené - každý má své unikátní ID. Jen jsem mluvil o tom, že jsem tu situaci uvažoval a že by se mohlo stát (kdyby postupoval podle rady od Someone), že by byli vybráni dva na místo jednoho.

Ad holinky x holínky
Ano s tím souhlasim, nicméně náš cvičící si potrpí na to aby aplikace byla totálně blbu vzdorná a tak mám pocit, že by mu tohle vadilo (i když uznávám, že máš pravdu).


Nouf
Fakt? Tak to by mělo být v pohodě. Ale neni to doufám až tak prasácké řešení, ne? Mě by právě zajímalo i jak se tyhle situace řeší v praxi.
Tori
Profil
Nikson:
tabulky Reziser a Film. Mezi nimi je vazba 1:N - film může režírovat pouze jeden režisér
Myslím si, že by to mělo spíš být M:N. Filmů s několika režiséry je sice méně, nicméně jsou (např. Matrix 1-3 nebo Bound od Andyho a Lany Wachowskich).

náš cvičící si potrpí na to aby aplikace byla totálně blbu vzdorná
Tak to mu přeju dobré nervy. :) Šlo by udělat i to, že do DB vy sám uložíte pár desítek nejznámějších režisérů a uživateli pak ve formuláři zobrazíte pouze výběr z už uložených jmen. Pokud tam svého režiséra nenajde, bude muset zaškrtnout volbu "Přidat režiséra" a po odeslání se mu zobrazí 2.formulář jen na jméno a příjmení. Pro uživatele velmi nepohodlné řešení, nicméně trochu lépe zajistí konzistenci dat.

Každopádně pokud data nezadáváte všechna sám, ale několik různých cizích lidí s různým stupněm motivace / pocitu spoluzodpovědnosti / znalostí, tak se šance na překlepy zvyšuje úměrně počtu osob a vkládaných záznamů. Příkladem budiž např. katalog hudebního odd. Městské knihovny Praha, kde je občas jeden skladatel uveden 2-4 způsoby (správně, s překlepem, nový záznam bez letopočtů narození/úmrtí, a případně i v transliteraci z (chybové) transpozice do azbuky).


Ad shoda jmen několika režisérů:
Pokud budou v rozbalovací nabídce, tak stačí např. za jménem uvést nejznámější film nebo jiný rozlišující znak. Koukněte třeba, jak vypadá vyhledávání na imdb.com.

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: