Adatbázis tervezés - Egy mező többféle adattípussal
Sziasztok!
Tegyük fel, hogy egy ingatlanokat tartalmazó adatbázisból szeretnénk kiválasztani az igényeinknek leginkább megfelelőt. Kérdés: hogyan nézzen ki az adatbázis. Eddig jutottam:
I. fázis:
INGATLANOK (id, cím, tulajdonos, alapterület, szobák száma, tájolás, szintek száma, ...)
A probléma ezzel az, hogy az ingatlanról nyilvántartott adatok "félesége" korlátozott. Úgy szeretném, hogy lehessen később is tulajdonságokat adni az ingatlanokhoz, legalábbis azokhoz, amelyeket az új tulajdonság bevezetése után fogok nyilvántartásba venni (az is érdekes probléma, hogy megjelenjen-e az újonnan bevezetett tulajdonság a már eddig regisztrált ingatlanoknál, illetve végig kell-e menni "kézzel" a régebbi ingatlanokon és kitölteni az új tulajdonság értékét, ha azt fontosnak tartjuk. Erre a problémára van tippetek?) . Például fél év múlva rájövök, hogy sokan érdeklődnek a fürdőszobák száma, vagy a burkolatok jellege iránt. Ezért...
II. fázis:
INGATLANOK (id, cím, tulajdonos)
TULAJDONSÁGOK (id, név)
INGATLANOK <-> TULAJDONSÁGOK kapcsolótábla (ingatlan_id, tulajdonság_id, érték)
Ezzel meg az a gond, hogy a különböző tulajdonságokhoz különböző adattípusok tartoznak. Az alapterület értéke négyzetméter, a tájolás szöveges érték. Talán lehetne kódokat alkalmazni és szoftveresen átalakítani a megfelelő értékekre, de ezt buherálásnak érzem. Ezért...
III. fázis:
INGATLANOK (id, cím, tulajdonos)
SZÖVEG_TÍPUSÚ_TULAJDONSÁGOK (id, név)
SZÁM_TÍPUSÚ_TULAJDONSÁGOK (id, név)
...
INGATLANOK <-> SZÖVEG_TÍPUSÚ_TULAJDONSÁGOK kapcsolótábla (ingatlan_id, szöveg_típusú_tulajdonság_id, érték)
INGATLANOK <-> SZÁM_TÍPUSÚ_TULAJDONSÁGOK kapcsolótábla (ingatlan_id, szám_típusú_tulajdonság_id, érték)
...
Jó ez így, vagy Ti másképp csinálnátok?
■ Tegyük fel, hogy egy ingatlanokat tartalmazó adatbázisból szeretnénk kiválasztani az igényeinknek leginkább megfelelőt. Kérdés: hogyan nézzen ki az adatbázis. Eddig jutottam:
I. fázis:
INGATLANOK (id, cím, tulajdonos, alapterület, szobák száma, tájolás, szintek száma, ...)
A probléma ezzel az, hogy az ingatlanról nyilvántartott adatok "félesége" korlátozott. Úgy szeretném, hogy lehessen később is tulajdonságokat adni az ingatlanokhoz, legalábbis azokhoz, amelyeket az új tulajdonság bevezetése után fogok nyilvántartásba venni (az is érdekes probléma, hogy megjelenjen-e az újonnan bevezetett tulajdonság a már eddig regisztrált ingatlanoknál, illetve végig kell-e menni "kézzel" a régebbi ingatlanokon és kitölteni az új tulajdonság értékét, ha azt fontosnak tartjuk. Erre a problémára van tippetek?) . Például fél év múlva rájövök, hogy sokan érdeklődnek a fürdőszobák száma, vagy a burkolatok jellege iránt. Ezért...
II. fázis:
INGATLANOK (id, cím, tulajdonos)
TULAJDONSÁGOK (id, név)
INGATLANOK <-> TULAJDONSÁGOK kapcsolótábla (ingatlan_id, tulajdonság_id, érték)
Ezzel meg az a gond, hogy a különböző tulajdonságokhoz különböző adattípusok tartoznak. Az alapterület értéke négyzetméter, a tájolás szöveges érték. Talán lehetne kódokat alkalmazni és szoftveresen átalakítani a megfelelő értékekre, de ezt buherálásnak érzem. Ezért...
III. fázis:
INGATLANOK (id, cím, tulajdonos)
SZÖVEG_TÍPUSÚ_TULAJDONSÁGOK (id, név)
SZÁM_TÍPUSÚ_TULAJDONSÁGOK (id, név)
...
INGATLANOK <-> SZÖVEG_TÍPUSÚ_TULAJDONSÁGOK kapcsolótábla (ingatlan_id, szöveg_típusú_tulajdonság_id, érték)
INGATLANOK <-> SZÁM_TÍPUSÚ_TULAJDONSÁGOK kapcsolótábla (ingatlan_id, szám_típusú_tulajdonság_id, érték)
...
Jó ez így, vagy Ti másképp csinálnátok?
Másképp csinálnánk :)
INGATLANOK (id, cím, tulajdonos...)
TULAJDONSÁGOK (id, név)
INGATLANOK <-> TULAJDONSÁGOK kapcsolótábla (ingatlan_id, tulajdonság_id, érték_id)
ÉRTÉKEK (id)
SZÖVEGES_ÉRTÉKEK (id, érték, érték_id)
SZÁM_ÉRTÉKEK (id, érték, érték_id)
...
Az INGATLANOK_TULAJDONSÁGOK kapcsolótábla 1:N kapcsolatban áll az ÉRTÉKEK táblával, mert az INGATLANOK_TULAJDONSÁGOK egy rekordjához csak egyféle érték tartozhat, de egy ÉRTÉK több INGATLANOK_TULAJDONSÁGOK rekord értéke lehet.
Az ÉRTÉKEK tábla unáris egyed, azaz csak egy attribútuma van, az azonosítója.
A SZÖVEGES_ÉRTÉKEK, SZÁM_ÉRTÉKEK (és még tetszőleges adattípusokat tartalmazó további egyedek) az ÉRTÉK egyed specializációi. Ezen specializációk száma ugyan kötött, de újabb adattípusra jóval kisebb az esély, mint új tulajdonságra. Az INGATLANOK_TULAJDONSÁGOK és ÉRTÉKEK egyedek közötti 1:N viszony N:M is lehet, ekkor még egy kapcsolótábla kell, de ez nem érinti a lényeget.
Vélemény?
Mennyire érdemes szétbontani az adatbázis tábláit?
Tehát egy menűsor létrehozása lenne a feladatom, mégpedig termékekből. Valahogy így nézne ki:
Ami a kérdésem lenne, hogy ilyen esetben mennyire érdemes az adatbázist külön táblákra bontani? Ugye csinálhatnék egy termékek táblát, és azon belül a fenti mezőket, de ha jól gondolom, elég nagy redundancia lenne akkor ha 200 féle sajtnál az első mező (termek) nél 200 szor szerepel a "sajtok". Vagy almenűpontonként teljesen szedjem szét (tehát termékek tábla, tejtermekek, stb stb...) Milyen úton szoktatok ilyenkor elindulni? Az igazság az hogy láttam már olyat aki adatbázisokat tervez... :-)
Köszönöm az ötleteket előre is!
2 táblával: termékek és menü
A többszintű menü azonban külön táblába kívánkozik, mert az másféle adatokat tartalmaz. Akkor ide jöhetnek a többi menüpontok is, ha vannak ilyenek.
A két táblát pedig össze lehet kötni 1-1 összerendeléssel, vagy akár egy kapcsolótáblával is. Ha kapcsolótábla lesz, akkor egy termék akár több helyen is megjelenhet (pl. gyártó szerint és termék fajta szerint listázva)
Menüt adatbázisban csináltam már úgy, hogy egy sornak (menüpontnak) van a, b, c "menüszint azonosítója", amit 3 adatmezővel írtam le - de láttam már úgy is, hogy egy sorban (menüpontban) megadják a szintet (mélységét) és a befoglaló/szülő menüpont azonosítóját. A menüpontok mindkét esetben jól le vannak írva az adatbázisban, csak a megjelenítésük megy másképp.
Köszönöm ez nagy segítség
termék törzsadat+többi adat
Azt a helyzetet, ha a többféle kategóriájú terméknek más-más adattípusa van (egyiknél megadom a színét, másiknál a méretet), megint le lehet kezelni.
Csinálsz egy termék törzsadat táblát - benne olyan adatokkat, amik minden termékben megvannak (neve, leírása, kép), a kategória-specifikus adatok meg mennek egy segédtáblába:
- segédtábla ID
- főtábla kapcsoló ID
- adat neve
- adat értéke
Így később rugalmasan vehetsz fel új adattípusokat az egyes termékekhez. Sőt a módszert tovább fnomítva megadhatsz egy termékhez akár több (nagyker/kisker) árat is és mindenki azt látja, amit a jogosultsága megenged neki.
A termék főtáblát és a segédtáblát egy-több összerendeléssel kérdezheted le.
köszönöm
Fícsörök