Diskuze: Návrh DB - Realitní kanceláře
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 14 zpráv z 14.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.


Vztahy by měly být tak, jak jsem to neuměle nakreslil na obrázek (nemám tu design tool).
Ahoj,
připravil jsem si pro tebe krátkou anketu:
Narážím na to, že je obtížné vytvořit dobrý databázový model, pokud neznám případy užití...
Díky za návrhy a postřehy abych odpověděl Silvinois tak:
1)ano
2)ne
3)ano
4)ne
5)prodávající ma N nemovitostí a jedna nemovitost patří právě jednomu
prodávajícímu
6)ne nemůže
7)ne, jednu nemovitost může prodávat pouze jedna realitní kancelář
ano
9)pokud je záznam v tabulce Prodané tak nabídka je prodaná nebo také
id_prodane v tabulce Nabídka se nerovná NULL
10)Nevím co přesně myslíš, id nového vlastníka je uchován v položce
vlastník v tabulce Prodané a starý vlastník je v podstatě přístupný
přes id_nabidky v tabulce Prodané, jelikož nabídka se po prodeji z db
nemaže
Díky za odpověď, teď jsem se na to díval a dává to větší smysl než to moje. Jenom jsme úplně neporozuměl tomu bodu 7). Jak si to myslel s těmi prodanými?
Že máš tabulku pro poptáku a další pro nabídku => ty pak udělají třetí (vazební) kde bude ten prodej
Máš relace:
Když se uskuteční prodej, je to na základě nabídky a poptávky, takže prodej není o prodané nemovitosti, ale o uskutečnění vztahu nabídka/poptávka.
Tím pádem je korektní pouze relace:
Z nabídky se dostaneš na nemovitost, tím pádem víš, co bylo prodáno. Na druhou stranu prodaná nemovitost je taková, kde existuje nabídka odkazovaná prodejem.
Všechny prodané nemovitosti (T-SQL):
select *
from Nemovitost as nem inner join
Nabidka as nab on nem.id = nab.id_nemovitost inner join
Prodej as prd on nab.id = prd.id_nabidka
Všechny neprodané nemovitosti (T-SQL):
select *
from Nemovitost as nem inner join
Nabidka as nab on nem.id = nab.id_nemovitost left join
Prodej as prd on nab.id = prd.id_nabidka
where prd.id is null
Koukám, že jsem výše uvedl relaci MxN, ale je to vlastně nepovinný vztah 1x1.
Jinak před tvorbou ER modelu se vyplatí mít use-cases v aplikaci, bez nich se navrhuje databáze hodně těžko. Což je důvod, proč se Silvinios ptal na tolik otázek.
Já se na koukal jako na školní projekt a selským rozumem jsem udělal jednoduchý koncept. Reálná databáze by neměla 10 tabulek, ale tak 100. Tam už to bez UC nejde.
ERM pak musí reflektovat funkční vztahy bez přidaných závislostí. Pokud nemáš rozmyšlené use-cases, vždycky dostaneš model, který je redundantní z hlediska funkčních závislostí. Sice existuje proces dekompozice, kterým se to odstraňuje, ale to už je oprava chybného návrhu.
Super, díky moc za vysvětlení, právě ta relace MxN u prodeje mě zmátla
. Předělal jsem to podle
tvojich rad a teď to vypadá takhle.
Ještě můžeš zvážit, jestli u tabulek neudělat flag na aktuální platnost.
Obvykle se v databázi drží i kompletní historie všech událostí. Tzn. že pokud se např. prodejce rozhodne změnit nabídku, tak se stará označí jako neplatná (ale fyzicky se nemaže) a vytvoří se nová. Všechny dotazy do databáze pak musí zohledňovat aktuální platnost záznamu, což je pouze jedna podmínka navíc.
A koukám, že máš různě pojmenované primární klíče ve všech tabulkách. Primární klíč by vždy měl být "id" bez dalšího názvu.
Jsou dvě varianty názvu primárního klíče, každá z nich má své opodstatnění:
Ani jsem nevěděl, že NATURAL JOIN nebo USING existují. Pracuju s T-SQL a tam nic takového není. Také používám starší nástroje a frameworky, kde různé názvy PK způsobují komplikace.
Nicméně, díval jsem se na diskuze a obě konstrukce se odsuzují jako nepředvídatelné a nedoporučuje se použití, což celkem chápu. Také radši používám průnik funkcionality, aby mi dotazy běhaly na MS SQL Serveru i SQLite současně. Ovšem proti gustu žádný dišputát.
NATURAL JOIN beru s rezervou, ale USING někdy používám. Zejména pokud mě někdo nutí, abych používal stejné názvy pro PK a FK. Dlouhé názvy bez používání USING nemají valného významu.
Raději mám jako PK prosté "id" a jako FK "tabulka_id".
Zobrazeno 14 zpráv z 14.