Rada při návrhu db tabulek

SB

  • ****
  • 347
    • Zobrazit profil
    • E-mail
Re:Rada při návrhu db tabulek
« Odpověď #60 kdy: 24. 06. 2021, 14:03:49 »
PanVP:
Citace
ORM - rovnák na vohejbák.
Ne, to není rovnák na vohejbák.

Nebudu vás přesvědčovat, dle vašich uvedených názorů to nemá smysl. Uvedu jen jednu okolnost, proč objekty a RDB jsou nekompatibilní:

V objektovém modelu se velice často pracuje se seznamy, přesněji jsou v obj. modelu klíčové (kdo by to byl řekl, že?). Např. takový Smalltalk má MIMOŘÁDNOU „knihovnu“ pro práci se seznamy (což se nedá říci o většině ostatních jazyků).

Když pak taková data chcete uložit do RDB, zjistíte, že RDB NEZNÁ seznamy! Jasně, už slyším křik: „Ale když udělám SELECT něco FROM něco WHERE id_rádobyseznamu = něco, tak mám seznam.“ To ale není seznam, to je pouze podmnožina VŠECH prvků seznamů STEJNÉHO typu nasypaných do jedné krabice zvané tabulka, kterou abych získal, musel jsem je v té krabici dohledat (bez ohledu na to, zda jsem při tom použil index; ano, to je jak s tím jehličím v krabici). Takže tento seznam nebyl nikde uložený jako celek (jako např. v dokumentové DB pod jedním klíčem), ten jsem musel ad hoc sestavit, a zrovna tak jej budu muset pro uložení rozebrat. A to nezmiňuju skutečnost, že onen seznam může mít jako objekt další vlastnosti (např. předpis pro řazení), které, pokud pro ně neudělám další tabulku, nebudu mít kam uložit.

Já myslím, že pro představu tento příklad stačí.


Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Rada při návrhu db tabulek
« Odpověď #61 kdy: 24. 06. 2021, 14:38:03 »
PanVP:
Citace
ORM - rovnák na vohejbák.
Ne, to není rovnák na vohejbák.
RDB NEZNÁ seznamy! Jasně, už slyším křik: „Ale když udělám SELECT něco FROM něco WHERE id_rádobyseznamu = něco, tak mám seznam.“ To ale není seznam, to je pouze podmnožina VŠECH prvků seznamů STEJNÉHO typu nasypaných do jedné krabice zvané tabulka, ...

V seznamu je definováno pořadí, které je závislé na pořadí přidání elementu. Seznam nepotřebuje index. RDB dodává množinu, u které není definováno pořadí, pokud není explicitně uvedeno řazení v dotazu. Update DB tabulky seznamem není triviální úlohou a zpravidla je výhodnější to řešit jinak.

SB

  • ****
  • 347
    • Zobrazit profil
    • E-mail
Re:Rada při návrhu db tabulek
« Odpověď #62 kdy: 24. 06. 2021, 16:53:16 »
Protože zatímco v SQL máš danej formát rozpadnutí na relace, kterej je pro danou "logickou strukturu" jeden,

Způsobů mapování objektů na relace je vícero, určitě ne jeden.

...NoSQL je v podstatě moderní reinkarnace stromových databází. Se všemi plusy: snadná práce s daty, když "lezeš po stromě" a mínusy: když potřebuješ chodit "napříč lesem" - a tedy nutností dobře navrhnout strukturu stromečků.

V DB NoSQL se používají právě ty seznamy proto, aby se tím lesem nemuselo zbytečně courat, to je pazvyk z RDB.

Takže zatímco v SQL databázi se navrhuje databáze "automaticky" a při dodržení patřičných pravidel to "nejde udělat blbě"

Naopak z důvodu nutnosti rozkladu seznamů do tabulek a vazebných tabulek je návrh RDB nepřehledný. Chybně navržených relačních modelů jsem viděl dost.

v NoSQL u složitějších případů je poměrně podstatné, jestli se člověk na začátku vývoje "strefí" do datové struktury, která bude vhodná i třeba po letech...

Např. dokumentové DB jsou bezschématové, takže změna struktury se provádí uložením dokumentu v jiném formátu. V RDB je třeba změna statické struktury zvláštními příkazy, a to při odstavené DB.

...a tedy narozdíl od SQL databáze by ses tedy měl podstatně více drbat s analýzou dat, budoucích požadavků atd....

Obchodní analýza se neliší podle použité DB (když to teda nedělá relačník, který návrh systému začne od databáze). Následné mapování objektů do dokumentů je výrazně jednodušší než do relací.

Anebo daleko víc času, než jsi získal "superrychlým první návrhem", ztratíš refaktory databáze když zjistíš, že tam nějaký požadavek nejde udělat efektivně.

To už je jen chybný důsledek výše uvedeného závěru. Ale když myslíte...

M_D

  • ****
  • 369
    • Zobrazit profil
    • E-mail
Re:Rada při návrhu db tabulek
« Odpověď #63 kdy: 24. 06. 2021, 17:00:08 »
A blbé je, když se ti sejde věc, kde potřebuješ vedle sebe ideálně na něco relační, na něco timeseries a na něco NoSQL/dokumentační pohled... (a pokud těch dat je opravdu hodně, takže je blbé přiohýbat vše do jednoho konceptu).

Jsou 2 řešení: To vaše - budete to mít v jedné DB (což samo o sobě je otázkou, zda to stojí za to, u velkých systémů je stejně více zdrojů dat), ale ta data budete muset přeprzňovat mezi jejich a DB formátem. Nebo použijete pro každý typ dat určenou DB, ale bude to rychlé a bez přeprzňovaček.
Ano, když je dat málo, cpu vše do jedné DB, co mám rád/umím. Když jich je hodně, tak víc různých řešení. K tomu tam byl zmíněn ten Ignite jako možnost, jak to řešit - to mi dovolí mít data v různých databázích a mít k nim jednotný přístup a klidně naráz můžu přistupovat pomocí NoSQL key/value interface nebo pomocí SQL ke stejným datům, ať to v pozadí je SQL nebo NoSQL. V podstatě s trochou víc násilí jde udělat to, že do ignite pošlu "select cas,a,b,c,d from ... where ..." a zpět dostanu tabulku, kde sloupec A je vytažen z PostgreSQL, sloupec B je z InfluxDB, sloupec C vyčten z binárních souborů uložených v přílohách v CouchDB a sloupec D jsou data z Cassandry (ale až takový slepenec bych nechtěl mít na krku :-) ). A pokud do toho pošlu set/insert/update, tak to skrz Ignite doteče do těch cílových DB a Ignite si drží cache nejpoužívanějších dat v RAM pro urychlení přístupu.

Nejde třeba použít Postgres která umí fungovat i jako NoSQL, JSON a timeseries databáze (nemám zkušenost)? Kombinujete to někdo takto u Postgres?
Jde, používáme, že do PgSQL mlátíme přes jsonb sloupce a i ukládáme časové řady, částečně přes array. Jde to dělat, ale čistý Postgres používat jako timeseries není úplně ono (jak to přeleze pár set giga řádků), to chce asi TimescaleDB nadstavbu (ta půjde do testu).  Používáme pro timeseries i InfluxDB historicky, ale nějak se krabatí čelo nad některými změnami v 2.x.
U PgSQL vidím jako problém u nás spíše v tom, že to nemá úplně nejjendodušší řešení pro clustering už i jen těch možností pro master-slave HA setup je požehnaně, pokud si člověk třeba zvykl na multimaster u Cassandy nebo CouchDB. :-(

SB

  • ****
  • 347
    • Zobrazit profil
    • E-mail
Re:Rada při návrhu db tabulek
« Odpověď #64 kdy: 24. 06. 2021, 17:03:29 »
V seznamu je definováno pořadí, které je závislé na pořadí přidání elementu. Seznam nepotřebuje index.

Však taky indexy neslouží k popisu pořadí vkládání položek do seznamu.


Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Rada při návrhu db tabulek
« Odpověď #65 kdy: 24. 06. 2021, 17:55:58 »
V seznamu je definováno pořadí, které je závislé na pořadí přidání elementu. Seznam nepotřebuje index.
Však taky indexy neslouží k popisu pořadí vkládání položek do seznamu.

No právě. Přestože seznam nemá indexy, je definováno pořadí položek. Tohle se u RDB použít nedá. Přesto raději pracuji s RDB a pokud potřebuji stromy, sáhnu po DOM.

Logik

  • *****
  • 1 049
    • Zobrazit profil
    • E-mail
Re:Rada při návrhu db tabulek
« Odpověď #66 kdy: 24. 06. 2021, 18:04:15 »
Kit:
Citace
SQL je dostatečně expresivním jazykem, většina ORM toho nedosahuje.

Ano a ne. Záleží na úhlu pohledu. SQL má samozřejmě velmi výrazně širší možnosti, než jakýkoli ORM. Z tohodle pohledu ano. Ale z hlediska snadnosti napsání dané úlohy je SQL oproti ORM "assembler". Proto je někdy vhodné psát jen v ORM (pak ale často mohou být NoSQL databáze lepší volbou), někdy jen v SQL, někdy se hodí přístup kombinovat. Samozřejmě, má to své z určitého poledu problematické stránky, jak v link postoval SB.
SB:
Citace
V seznamu je definováno pořadí, které je závislé na pořadí přidání elementu. Seznam nepotřebuje index. RDB dodává množinu, u které není definováno pořadí, pokud není explicitně uvedeno řazení v dotazu. Update DB tabulky seznamem není triviální úlohou a zpravidla je výhodnější to řešit jinak.
To ale není problém OO a SQL, ale jde o obecnější problém
Objektový model neznamená nutnost používání seznamů. Ani v těch "nejpurističtějších" OO definicích žádné seznamy nejsou. Seznamy se používají čistě proto, že jsou to datové struktury, se kterými se dobře a jednoduše pracuje v imperativních jazycích. Ve skutečnosti mají být objekty "odrazem reality". Když si vezmu takový objekt "školní třída", tak ta má jako vlastnost "seznam žáků". A podle čeho má být ten seznam seřazen? Podle příjmení? Čísla ve třídním výkazu? Prospěchu? U drtivé většiny vlastností objektů není žádné "preferované pořadí", tedy jde o množiny, ne o seznamy.

Že se ta množina realizuje v praxi pomocí seznamu, to, že je tam nějaké pořadí dané časem vložení: to není žádná "objektová věc", ale je to implementační artefakt, který nemá s podstatou uložených dat nic společného. Max. se tento artefakt použije k implementačnímu urychlení procházení dané množiny podle nějakého preferovaného pořadí.

A z druhé strany - ano, SQL databáze používají na ukládání množiny. Nebo přesněji v programátorské hantýrce (pokud nejsou definovány unique constrainy) multisety. A ano, objekty jsou zpravidla implementovány seznamy. Potud ano, jenže..... Jak píšu výš ta "seznamovost" není podstata objektů. Funkcionální jazyky jsou "seznamové" ještě více, než OOP jazyky. Stejnětak v neOO přístupu, když se používají datové struktury a "funkce vedle", opět velmi často budeš pracovat se seznamy. Prostě seznam je nativní způsob ukládání něčeho v paměti při interaktivní práci, nezávislý na užitém programátorském paradigmatu

A teď je otázka - existuje nějaký "nativně seznamový" způsob persistentního ukládání dat? Jistě: samotný soubor je seznam bytů. Jenže ten je na nějaké rozumné používání hrozně nešikovný, je třeba nad ním udělat nějakou abstrakci. Tak jakou? Za "seznamovou" by se mohla částečně považovat stromové databáze, nebo jejich moderní inkarnace dokumentové databáze. Ale i tam (např. Mongo) jsou na hlavní úrovni kolekce, tedy množiny. A uvnitř sice jsou seznamy, které se velmi snadno mapují na "objekty" (ve skutečnosti na struktury pro interaktivní práci), což je velmi výhodné.....dokud nepotřebuji pracovat se "seznamy" napříč stromy. Nebo s vlastnostmi v jiném pořadí, než v kterém jsou uložené. Pak se najednou elegance těchto databází ztrácí.

Stejnětak vlastně filesystém - navenek je to stromová struktura, ale seznam souborů v adresáři není seznam, ale set, který se jednou řadí tak, jednou jinak. Stejnětak filesystém samotný je vlastně multiset datových bloků, s nějakým indexem vybudovaným nad tím setem. Když se zamyslíš, tak v podstatě každý aspoň trochu použitelný způsob práce s perzistentními daty daleko spíš připomíná práci se sety, než práci se seznamy.

To, co popisuješ není nekompatibilita mezi OO a SQL, ale je to obecně konflikt mezi strukturami vhodnými na interaktivní práci: kde z principu fungování paměti je výhodné sekvenční zpracování seznamů, a strukturami vhodnými na persistentní storage a vyhledávání dat, kde obecnost matematického množinového popisu poskytuje možnosti, které žádný "list-based approach" přinést prostě nemůže.A v podstatě i odrazem toho jsou debaty mezi SQL a NoSQL táborem: kdy jedni preferují snadnost eleganci a univerzalitu toho množinového popisu, za cenu té nikoli nekompatibility, ale práce navíc při mapování mezi těmi světy. Protože nekompatibilní to není, existuje tam bijekce. Jen je to práce navíc to "namapovat". A právě proto vznikly ORM, aby tu práci navíc co nejvíce odstínily (byť samozřejmě ne zadarmo).

A jsou lidé, kteří místo toho se snaží o co nejpřímější mapování "paměti" do persistentního úložiště, a Ti preferují jednoduchost NoSQL databází, kde je to mapování podstatně jednodušší. Ale ani jeden přístup není "ten jediný správný". Jsou případy, kde univerzálnost toho množinového popisu dalece převáží práci navíc, vynaloženou na mapování mezi těmi světy. A jsou případy, kdy tomu tak není a opravdu přímý "dokumentový" přístup je rychlejší.

A ani jeden z nich nebude mít pravdu, když bude tvrdit, že jeho přístup je "ten nejlepší na vše". Někdy se hodí mít úložiště "univerzální" za cenu té vícepráce - a někdy je ta vícepráce zbytečná.

"Seznamový" pohled na data není nic jiného, než "znásilnění" dat do formátu, s kterým se "algoritmicky dobře pracuje". A jak to u takovéhoto znásilnění bývá, tak je vhodné do té doby, dokud se nad danými daty používá "jeden způsob zpracování", pro který je vhodné způsob uložení dat optimalizovat.
Relační způsob je univerzální. Není "znásilněný", takže v něm jde všechno "dobře". Ale samozřejmě není optimalizovaný pro ten "jeden preferovaný způsob tak", jako stromové/dokumentové databáze.


Citace
Způsobů mapování objektů na relace je vícero, určitě ne jeden.
To bych se hádal. Pokud nebereš alternativy, které tu někdo zmiňoval, jako JSON a pole - což je jen jiná forma denormalizace, tak daná datová struktura má IMHO 1:1 rozpad na relace. Nebo máš nějaký konkrétní případ, kde to bude jinak?To, v čem se struktury liší je případně návrh té ukládané datové struktury, kdy se třeba někdy přizpůsobuje, aby se uložila do db vhodným způsobem, ale pokud máš nějakou strukturu entit a jejich vazeb, tak je rozpad na relace jednoznačný. Alespoň ve smyslu jako v příkladu níže.

Citace
V DB NoSQL se používají právě ty seznamy proto, aby se tím lesem nemuselo zbytečně courat, to je pazvyk z RDB.
Ne, to není pazvyk z RDB, to je prostě nutnost. Pokud máš učitelský sbor, a chceš jednou "seznam" učitelů, co učí danou třídu, podruhé seznam učitelů, co učí v dané učebně, potřetí seznam těch, co...., a počtvrté seznam žáků, co...., tak se prostě courání přes les principiálně nevyhneš.
Samozřejmě, jde to "emulovat" tak, že máš ve stromě uložen seznam "idček". Jenže to už je lezení přes strom a když se nad tím zamyslíš, tak nejde o nic jiného, než o zakuklený relační přístup.
Někdy to jde také řešit duplikací dat na více místech - ale ani to není jiného, než denormalizace v SQL, která je sice užitečná, ale vždy problematická, takže se Ti najednou výhodnost NoSQL začne ztrácet.

Citace
Chybně navržených relačních modelů jsem viděl dost.
Ano, chybně. To je právě to ono. Relační model je buďto správný, nebo chybný. Stromový model může být zcela správně: tedy může do něj být bez problémů zachytitelná jakákoli "realizace daného axiomatického systému" - prostě do něj zachytíš jakoukoli "validní" situaci, a přesto může být pro dané použití naprosto nevhodný. Např. když uděláš stromeček kdy budou nahoře žáci, pod každým žákem seznam jejich předmětů a pod každým předmětem jeho učitel, tak se Ti s tím při vytváření rozvrhu tříd bude pracovat fakt blbě. Ale datový model bude správně: korektně popíše jakoukoli "validní" situaci.
Relační model: kdy budeš mít množiny učitelů, žáků a předmětů a vazby mezi nimi, je daný jednoznačně, a když ho udělá člověk správně, tedy bude respektovat kardinalitu vazeb a z ní plynoucí způsob realizace této vazby, tak je právě jedna implementace takového "systému". A v této implementaci bude realizovatelný "jakákoli" úloha, kterou si vzpomeneš.

 

Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Rada při návrhu db tabulek
« Odpověď #67 kdy: 24. 06. 2021, 19:33:55 »
A teď je otázka - existuje nějaký "nativně seznamový" způsob persistentního ukládání dat? Jistě: samotný soubor je seznam bytů. Jenže ten je na nějaké rozumné používání hrozně nešikovný, je třeba nad ním udělat nějakou abstrakci. Tak jakou?

Takovými typickými seznamy jsou logy. Pro práci s nimi se výborně hodí textové utility grep, sed, awk, které s nimi pracují jako se skutečnými seznamy a zachovávají pořadí. Kdysi jsem na logovacích souborech postavil účetnictví - fungovalo to bezvadně a bylo to i rychlé.

Re:Rada při návrhu db tabulek
« Odpověď #68 kdy: 24. 06. 2021, 20:51:53 »
ORM je tzv. "leaky abstraction" -  https://en.wikipedia.org/wiki/Leaky_abstraction

coz vubec nevadi, pokud nepotrebujete stridat databaze. Hlavni ucel ORM je moznost psat SQL ve vyssim, expresivnejsim jazyce.

SQL je dostatečně expresivním jazykem, většina ORM toho nedosahuje.

Neni, je to jazyk nizke urovne abstrakce. SQL napriklad neumoznuje jednoduche skladani dotazu ze znovupouzitelnych casti, kdyz chcete pristupovat k nejakemu atributu pres pet joinu, musite je psat znovu a znovu v ruznych dotazech, ktere se navzajem podobaji. ORM a query buildery nahrazuji dynamicke lepeni dotazu z retezcu.

Muzeme se bavit konkretne, ukazte mi priklad SQL dotazu a ja vam ukazu radove kratsi ORM kod, ktery dela to stejne.

Pokud chcete slovickarit jako obvykle, nebudu odpovidat.
« Poslední změna: 24. 06. 2021, 20:56:33 od A.P.Hacker »

PanVP

Re:Rada při návrhu db tabulek
« Odpověď #69 kdy: 24. 06. 2021, 22:55:44 »
Mistr vyloží tři blbce, krompáč, lopatu, kolečko a povídá "Tady vykopejte díru a štěrk dejte sem!"
Tři "mladíci" se hádají, čím mají pracovat, jestli je lepší krompáč, lopata nebo kolečko.
Jeden flákne kolečkem o zem a odlétne kus země....kolečko je nejlepší na kopání! Tvrdí zkušeně.
Druhý nabere bordel na lopatu a na lopatě odnese štěrk padesát kroků....nejlepší je lopata!
Třetí vezme krompáč, vykopne kus země, otočí ho naplocho a jako hráběmi vyhrabe vykopaný štěrk, pak zkušeně nahází bordel na krompáč a odnosí to po drtkách. Všichni tři mladíci přikyvují, že KROMPÁČ je nejlepší a že se budou střídat jen u něj... Ostatně je nejzkušenější, tak ostatní přesvědčí...

...a mám radost, že i tady vidím pár takových mladíků... ::) :o ???

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Rada při návrhu db tabulek
« Odpověď #70 kdy: 24. 06. 2021, 23:05:37 »
Nejde třeba použít Postgres která umí fungovat i jako NoSQL, JSON a timeseries databáze (nemám zkušenost)? Kombinujete to někdo takto u Postgres?
Jde. Já mám v tomto aktuálně dobrou zkušenost u MSSQL. Ostatní na tom budou stejně.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Rada při návrhu db tabulek
« Odpověď #71 kdy: 24. 06. 2021, 23:17:42 »
Protože zatímco v SQL máš danej formát rozpadnutí na relace, kterej je pro danou "logickou strukturu" jeden,

Způsobů mapování objektů na relace je vícero, určitě ne jeden.
Mám knihu a autora.
Mám blog galerii obrázků, článek může obsahovat obrázky, článek může obsahovat komentáře, galerie může obsahovat komentáře.
Kolik tě napadá způsobů mapování?

v NoSQL u složitějších případů je poměrně podstatné, jestli se člověk na začátku vývoje "strefí" do datové struktury, která bude vhodná i třeba po letech...

Např. dokumentové DB jsou bezschématové, takže změna struktury se provádí uložením dokumentu v jiném formátu. V RDB je třeba změna statické struktury zvláštními příkazy,
Takže klasický spor staticky typovaný versus dynamicky typovaný?

a to při odstavené DB.
Ale no tak. To tě není hodno.

xyz

  • ****
  • 283
    • Zobrazit profil
Re:Rada při návrhu db tabulek
« Odpověď #72 kdy: 24. 06. 2021, 23:46:30 »
Mistr vyloží tři blbce, krompáč, lopatu, kolečko a povídá "Tady vykopejte díru a štěrk dejte sem!"
Tři "mladíci" se hádají, čím mají pracovat, jestli je lepší krompáč, lopata nebo kolečko.
Jeden flákne kolečkem o zem a odlétne kus země....kolečko je nejlepší na kopání! Tvrdí zkušeně.
Druhý nabere bordel na lopatu a na lopatě odnese štěrk padesát kroků....nejlepší je lopata!
Třetí vezme krompáč, vykopne kus země, otočí ho naplocho a jako hráběmi vyhrabe vykopaný štěrk, pak zkušeně nahází bordel na krompáč a odnosí to po drtkách. Všichni tři mladíci přikyvují, že KROMPÁČ je nejlepší a že se budou střídat jen u něj... Ostatně je nejzkušenější, tak ostatní přesvědčí...

...a mám radost, že i tady vidím pár takových mladíků... ::) :o ???

https://www.krcmic.cz/krumpac-x-krompac/

Logik

  • *****
  • 1 049
    • Zobrazit profil
    • E-mail
Re:Rada při návrhu db tabulek
« Odpověď #73 kdy: 25. 06. 2021, 00:10:09 »
SB: Nereagoval jsem ještě na tyto námitky - přitom jde možná o nejpodstatnější věci:

Citace
Např. dokumentové DB jsou bezschématové, takže změna struktury se provádí uložením dokumentu v jiném formátu. V RDB je třeba změna statické struktury zvláštními příkazy, a to při odstavené DB.
To ale překrucuješ, co jsem tvrdil. Nepsal jsem o složitosti provádění změny - koneckonců, když už se provádí změna, je způsob realizace změny schématu ten menší problém - daleko větš problém je nutnost adaptovat aplikaci na tu změnu, to že stará aplikace na nové struktuře nefunguje a nová na staré (anebo se kód zanáší "legacy vydličkama").
Psal jsem o tom, že tam, kde relační struktura nevyžaduje změnu, tak stromová může a dosti často bude, protože stromová struktura je podstatně méně univerzální, než ta relační.
Navíc, jak poukazuje BoneFlute, ta "statická typovanost" SQL databáze má nejen nevýhody, ale i výhody: např. podstatně větší záruky na udržení konzistence dat.

Citace
Obchodní analýza se neliší podle použité DB (když to teda nedělá relačník, který návrh systému začne od databáze). Následné mapování objektů do dokumentů je výrazně jednodušší než do relací.
Ke každé struktuře relací existuje mnoho stromových struktur, zachycujících tatáž data. Nikdo nezačíná od databáze. Začíná se od reálných objektů, které nějak mapuješ na (ať už SQL, nebo NoSQL) schéma. U SQL je to mapování (přinejmenším zpravidla) jednoznačné, u stormu prostě jednoznačné není. Má být učitel vlastnost třídy? Nebo třída učitele? Nebo to mají být dvě nezávislé kolekce odkazované idčky? Každý způsob zachycení dat se hodí pro něco jiného - a je třeba zvolit právě jeden. Nic takového není třeba u návrhu relačního schématu řešit.

Analýza SQL i NoSQL začíná úplně stejně: člověk zanalyzuje entity a vztahy mezi nimi. U SQL jsi pak v podstatě hotový, zbytek je "manuální" rozpadnutí do relací. U stromové databáze jsi ale neskončil, naopak je třeba udělat - a rozhodně ne nepodstatný - další krok: udělat analýzu, kterou konkrétní z těchto mnoha stromových struktur zachycujících ten samý logický systém zvolit.

Nemluvě o tom, že ani nemusí existovat stromová struktura, která je vhodná pro realizaci všech požadovaných pohledů na modelovaná data. Ne všechna data v realitě jsou strom a ne vždy je "zjednodušení do stromu" ku prospěchu věci. Nekdy samozřejmě ano.

Re:Rada při návrhu db tabulek
« Odpověď #74 kdy: 25. 06. 2021, 05:31:25 »
ORM je tzv. "leaky abstraction" -  https://en.wikipedia.org/wiki/Leaky_abstraction

coz vubec nevadi, pokud nepotrebujete stridat databaze. Hlavni ucel ORM je moznost psat SQL ve vyssim, expresivnejsim jazyce.

SQL je dostatečně expresivním jazykem, většina ORM toho nedosahuje.

Neni, je to jazyk nizke urovne abstrakce. SQL napriklad neumoznuje jednoduche skladani dotazu ze znovupouzitelnych casti, kdyz chcete pristupovat k nejakemu atributu pres pet joinu, musite je psat znovu a znovu v ruznych dotazech, ktere se navzajem podobaji. ORM a query buildery nahrazuji dynamicke lepeni dotazu z retezcu.

Muzeme se bavit konkretne, ukazte mi priklad SQL dotazu a ja vam ukazu radove kratsi ORM kod, ktery dela to stejne.

Pokud chcete slovickarit jako obvykle, nebudu odpovidat.

To co umožňuje perzistentní  kompozici v SQL se jmenuje pohledy. Pokud si vyrobíte pohled, tak nemusíte opakovaně psát JOINy.

Stačí jednoduchá úloha - mějte relaci obce, a relaci okresy, a pro každý okres dohledejte 10 největších obcí (efektivně).