Návrh modelu aplikácie rubrika: Návrh
Zdravím,
rozmýšľam nad čo najlepším údajovým modelom pre uloženie objektov aplikácie.
(ak použijem terminológiu nevhodne, prosím nekameňovať)
Doménové entity sú jednoduchá úloha, úloha so zadaniami, úloha s otázkami, zadanie, otázka, zbierka úloh.
rozdiel medzi zadaním a otázkou je v tom, že zadanie je znovupoužiteľné v ďalších úlohách, naproti tomu otázka je viazaná len na tú svoju úlohu, pri ktorej vznikla.
U každej z entít si pamätám autora, čas vzniku, idčko a nejaké ďalšie veci. Špecifikom je otázka o ktorej si nemusím tieto veci pamätať, lebo je viazaná na svoju úlohu - mohol by existovať prechod od otázky k zadaniu, ak sa niekto rozhodne, že daná otázka sa môže znovupoužiť.
Zatiaľ uvažujem o takom rozhodení do tabuliek, že základom je tabuľka ENTITA(ID, CAS_VZNIKU, ID_AUTORA, TYP_ENTITY, ....) na ňu sú napojené cez FK tabuľky ULOHA, ZBIERKA, ZADANIE. Na tabuľku ULOHA sa napájajú tabuľky JEDNODUCHA_ULOHA, ZLOZENA_ULOHA, OTAZKOVA_ULOHA.
Vytvárajú teda akýsi les:
ENTITA .. ZBIERKA .. ULOHA .. JEDNODUCHA_ULOHA .. ZLOZENA_ULOHA .. OTAZKOVA_ULOHA .. ZADANIE OTAZKA
všetky tabuľky pod entitou preberajú ako svoj primárny kľúč primárny kľúč entity (prebubláva cez FK k nim).
Ide o to, že napríklad zbierka úloh bude v mať v sebe úlohy, je jedno, ktorý podtyp to je. Robím to takto, lebo chcem mať referenčnú integritu údajov cez FK. Takže tabuľka ULOHA_ZBIERKY bude v sebe niesť ID_ULOHA (FK na idčko v tabuľke ULOHA) a ID_ZBIERKA (FK na idčko v tabuľke ZBIERKA).
V podstate potom si to predstavujem tak, že keď sa budú načítavať údaje, tak zoberie z tabuľky všetky úlohy pre danú zbierku aj s ich typom, ktorý načíta z entity. (Jeden selekt).
A budem ich načítavať postupne po jednotlivých typoch. Pričom podľa typu úlohy sa bude volať príslučný load pre príslušné idčka a načíta ich jedným selektom a vytvorí kolekciu.
Teda na načítanie zbierky budem potrebovať 4 selekty. (môj plán).
Je to takto vhodné? Alebo idem na to úplne zle?
Ako by som takéto správanie dosiahol cez ORM?
Jenom malá důležitá poznámka - pokud pracujete s relační databází, a plánujete pracovat s daty trochu většími než malými zapomeňte, že existuje OOP - zejména, že existuje dědičnost. Simulace dědičnosti je jeden ze známých antipaternů. Relační databáze neumí dědičnost - tečka. Pokus o implementaci dědičnosti pak vede k nutnosti denormalizace, denormalizace pak k šílenému schématu, se kterým se extrémně špatně pracuje.
Pro zobrazení všech 7 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře