Autor | Zpráva | ||
---|---|---|---|
Kos112567 Profil |
#1 · Zasláno: 21. 5. 2017, 17:17:16
Ahoj,
mám takový problém s dědičností tabulek - mám 4 tabulky (Item, Potion, Armor, Weapon) a chtěl bych, aby Item byl rodič tabulek Potion Armor a Weapon. Vytvořil jsem ty tabulky pomocí dotazů takto: CREATE TABLE "Item" ( itemid integer NOT NULL, name character varying, value integer, description character varying(300), icon character varying(200), type integer, CONSTRAINT item_pkey PRIMARY KEY (itemid) ) A teď nevím úplně, jak napsal dotaz na ty zbylé tři tabulky tak, aby dědili sloupce z té první. Také na otázku "jak se přesně bude chovat do dědění" si nějak neumím přesně odpovědět. Pokud vše budu mít v pořádku vytvořeno a pak přidám nějaký záznam např. do tabulky Weapon, tak by se mi tentýž záznam měl objevit i v rodičovské tabulce Item...? |
||
Keeehi Profil |
#2 · Zasláno: 21. 5. 2017, 19:12:52
Žádné dědění, pokud je mi známo, v databázích neexistuje.
Tvůj případ bych vytvořil tak, že bych do tabulky item přidal sloupec, který by nabýval hodnot Potion, Armor nebo Weapon. |
||
Kos112567 Profil |
#3 · Zasláno: 21. 5. 2017, 19:37:42
Mám to takto nadefinované v konceptuálním a logickém schématu (viz printscreen).
Reálně to teda nelze udělat tak, že bych měl 4 tabulky, které by měly vlastnosti viz výše? |
||
Keeehi Profil |
#4 · Zasláno: 22. 5. 2017, 00:27:07
OK, v tomto případě lehce jinak.
Tabulka Item má atributy společné pro všechny tři ostatní tabulky. Ostatní tabulky mají jen ty, které jim oproti tabulce Item chybějí. Data by jsi v databázích neměl duplikovat. Tedy možné to je, ale používá se to pro zvýšení výkonu a musíš u toho vědět, co a proč děláš. |
||
Časová prodleva: 12 dní
|
|||
juriad Profil |
Způsoby jak modelovat dědičnost objektů v databázi jsou popsané ve specifikaci JPA en.wikibooks.org/wiki/Java_Persistence/Inheritance. Je to sice pro Javu, ale když si odmyslíš to mapování mezi Javovými třídami a tabulkami, tak je to obecně platné.
Velice podobná věc je pak v PHP frameworku Doctrine docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html |
||
M4n Profil * |
#6 · Zasláno: 3. 6. 2017, 00:59:01
Tady by možná stálo za to zmínit, že relační databázový model je sice asi nejpoužívanější, ale určitě ne jediný. Existují i objektově orientované databáze, kde dědičnost funguje nativně.
V praxi se tento problém řeší většinou nějakou vrstvou pro Objektově–Relační Mapování (ORM), například zmiňovaný Doctrine. |
||
Časová prodleva: 7 let
|
0