Adatbázis struktúra tervezése
2011-12-07T18:46:30+01:00
2011-12-08T21:08:43+01:00
2022-07-24T08:01:14+02:00
  • Szerintem:

    Van egy foglalás fej táblád, ebbe írod bele hogy a télapó foglalása. (id, nev, tol, ig)

    Van egy szobafoglalás táblád. Mert télapó lehet hogy hozza a manókat és a szarvasokat is és lehet hogy nem férnek be egy szobába. (id, nev, foglalas_id, szobakat_id, szobaszám?, tol, ig). Itt is kell tol ig dátum, mert a mikulás lehet hogy hazamegy a szarvasokkal, de a manók maradnak szilveszterre is.

    Aztán vannak a vendégek tábla (id, nev, szoba_id, tol, ig ).
    Itt is kell tól ig dátum. A manók közül néhány előbb hazautazik mint a többi. De persze utána sem vonják össze a szobákat. Tehát lesz olyan szoba, amiben 3-an voltak még újév napján, de másodikán már csak ketten. Bónusz probléma a költöztetés dilemmája.

    Kelleni fog egy csomag tábla:
    A csomagot fogod felkínálni a vendégnek. Lesz olyan csomagod, ami csak szállást és reggelit tartalmaz. De lesz olyan, ami érkezéskor itallal fogadja a vendéget, 2 masszírozást, egy fényterápiát és egy kedvezményes, vagy ingyenes belépőt a szálloda mellett található aqua csodába. Ezt teheted úgy hogy a szobának jár összesen, de teheted azt is hogy a szobában mindenkinek.

    A csomaghoz tartoznak szolgáltatások. A szolgáltatásokat ki kell majd számlázni. Ilyen a szállás, a reggeli, az ebéd, de az aqva csoda belépő is.

    A csomagot és a szolgáltatásokat valahogy úgy kell megtervezned, hogy lehessen szobára, vagy szobakategóriára, vagy épp a vendégre terhelni. De ha vendégre terheled, akkor az egyágyas felár és a pótágyas kedvezmény is belekerülhet a csomagba. Attól függően hányan vannak a szobában.

    Bónusz probléma, hogy oldod meg hogy automatikusan terhelje a program csomagot? Mit kell majd kiválasztani a vendégnek? Én úgy hívom hogy statisztikai kód. A statisztikai kód mondjuk az hogy "hármat fizet kettőt kap", ami azt jelenti, hogy 3 éjszakát fizet és kettő éjszakát szállhat meg. Még senki nem vette igénybe (ki érti? ), de ha mégis kiválasztják, a vendég táblába (foglalás táblába?) rögzítésekor a program az ahhoz tartozó csomagot terheli a foglalásban, szobában lévő vendégekre.

    Kelleni fog még egy IFA besorolás is. Mert mindenki aki elmúlt 18, fizet IFÁ-t, kivétel ez alól aki nem. Viszont lesz majd 80 szállodád, ahol 32 esetben a 70 év feletti is fizet kivéve ha nyugdíjas. Vagy esetleg munkaügyben jár ott, akkor sem fizet az egyik szállodában, utána átmegy a másikba és ott fizet, pedig munkaügyben van ott is, de ott az önkormányzat tojik rá, fizessen és kész, meg különben is a pofikát lehet befogni, mert holnap jönnek ki ellenőrizni. Annyit nem ér az a 350Ft. Viszont a vendég dec 21-el érkezik, és 2-án utazik, ebből dec 21-től január elsejéig 350 Ft IFA összeget fizet, de Január 01-02 éjszakájára már emelték a tarifát 400 Ft-ra. Erről január 4.-én kapsz egy értesítést is...

    ÁFA: ez is egy szép történet.
    Az ez évi ÁFÁT megúszod, kizárt hogy januárra elkészülsz. Meg a számlázási részt is lehet hogy kihagyod a programból. Én kihagynám a helyedben, nincs az a pénz, amiért csinálnám. Na jó van, de nem kevés.
    Szóval az ÁFA azért szép, mert az igénybe vett éjszaka után fizetsz. A teljesítés meg a megkezdett dátum. Tehát a dec 21 - január 2 közötti időszakra, az IFA-hoz hasonlóan lesz 13 éjszakád, amiből 12 éjszaka még 25%-os, de az utolsó éjszakád már 27%-os ÁFÁ-t tartalmaz.
    Természetesen a számlázás még további buktatókat is felvet. Elvileg szállást nem szabad reggeli nélkül forgalmazni. De míg a szállást a megkezdett naphoz terhelsz, az IFA-t a befejezett naphoz, a reggelit vajon hová? Ugyan együtt lehet a szállás a reggelivel, például : "Nagyon kedvezményes szállás reggelivel", de valahol mégis meg kell jelennie a reggelinek, mert majd megkérdik hogy hányan esznek ma reggelit a szállodában. Mivel neked a szállásod az előző naphoz terhelődik, megtehetnéd hogy az előző naphoz tartozó "Nagyon kedvezményes szállás reggelivel" kéred le, de ehhez még hozzá kell csapnod az aznap külön igényelt reggeliket. Például amikor egy 3 év alatti gyermek ingyen száll meg, de nem kap reggelit, akkor kérhetnek neki.

    És akkor ügye vannak a kedvezmények. A kedvezmények közül az a kedvencem, amikor a kedvezményes szállásra adunk még kedvezményt és a kedvezményezett "Nagyon kedvezményes szállás reggelivel" olcsóbb mint a reggeli.

    Ezek csak szösszenetek egy szálloda történeteiből. Amit a marketingesek és a könyvelés kitalálhat, minden jöhet. Remélem elvettem a kedved hogy egy hétvége alatt megcsináld a programod De azért sok sikert hozzá!
    Mutasd a teljes hozzászólást!
  • Itt nem szoktam a típusnál hossz értéket megadni de az INT max. értéke 11 ha jól tudom.


    Az a kijelzási hossz, aminek számok esetén sok értelme nincs (hacsak a zerofill-t nem állítod be, ha mysql-ről beszélünk). Szépen utánanézel, hogy az adott db kezelőnél mi az int típusban maximálisan tárolható érték és meg is lesz a válasz.
    Mutasd a teljes hozzászólást!
  • Értem köszönöm.
    Az egyedi azonosításhoz az 'id' -t használom
    id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id)
    Itt nem szoktam a típusnál hossz értéket megadni de az INT max. értéke 11 ha jól tudom.

    Ez mit jelent pontosan hogy akkor hány rekord lehet a táblában?
    Mutasd a teljes hozzászólást!
  • Nincs ilyen maximális határ, db kezelő, oprendszer és a db kezelőn belüli beállítások, a tábla sajátosságai együttesen határozzák meg a maximális méretet.

    És, de függhet a rekordszámtól is, pl. ha valamilyen számlálót használsz egyedi azonosításhoz és a rekordok száma eléri a számláló értékkészletét.
    Mutasd a teljes hozzászólást!
  • Köszönöm a segítséget, neki is állok.
    Ha elakadok még jövök

    Még annyit nem tudok pontosan hogy egy sql táblának mi a tároló kapacitásának a felső határa?

    Mert ha csak egy átlagot számolok pl. 1 szállásnak lesz kb: 200 rekordja (de lehet több is max:730 ) ebben az 1 táblában, akkor 1000 szállásnál a rekordok száma már meghaladhatja a 200.000 -et.

    Azt tudom hogy a keresőt ezt nem fogja túlzottan befolyásolni mert
    csak bizonyos feltételek alapján keresek az adatbázisban, bár attól függetlenül végig kell rohannia a 200.000 rekordon de nem hiszem hogy ez nagyon belassítaná.
    Hanem hogy egy táblában mennyi adatot lehet tárolni? Gondolom a rekordok számától függetlenül inkább a max, méretre vagyok kíváncsi.
    Mutasd a teljes hozzászólást!
  • Nagyjából így van.
    Mutasd a teljes hozzászólást!
  • Értelek mit mondasz, de nem csak egy tág időintervallumban fogják meghatározni a szállás adatait, hanem év, hó és napra pontosan.
    Minden napra teljesen különböző adatokat lehet megadni.
    Értem a gondolatodat, de szerintem hasonlóan gondolkodsz mint amit az előbb leírtam.
    Mutasd a teljes hozzászólást!
  • Ha jól értem akkor csináljak egy táblát és minden szállás ha beállít egy bizonyos időpontot az egy új rekord legyen a táblában?

    Pl: legyen a szállás neve "Apartman 1".
    szallas_id = 12

    létrehozott a szálláshoz egy szobát aminek a neve "szoba 1".
    szoba_id = 35

    Beállít egy időpontot: 2012.januar.20

    Meghatározza erre az időpontra vonatkozó szállásadatokat:
    szoba_ar = 2000
    reggeli = 1000
    felpanzio = 500

    Na most ha ez megvan akkor legyen egy olyan tábla ahová rekordonként felveszem ezeket az adatokat?

    table_name
    -----------
    id | ev | ho | nap | szallas_id | szoba_id | szoba_ar | ....stb ---+------+------+-----+--------------+----------+----------+--------- 1 | 2012 | 1 | 20 | 12 | 35 | 2000 | ---+------+------+-----+--------------+----------+----------+---------

    ...és ha előre meghatároz pl. 1 hónapot különböző adatokkal akkor 30 rekordot vegyek fel a táblába?

    Ez most így belegondolva szerintem egy egész jól átlátható tábla struktúra. Egy rekordban megtudom a konkrét pontos adatokat amire csak szükségem van, és célzottan lehet keresni a táblában a keresési feltételek alapján. Így nem kell egy csomó táblán végig rohannia a proginak.
    Még ha egy bizonyos időintervallumot határoz meg a felhasználó (ami leginkább várható) akkor is sokkal könnyebben lehet keresni
    és gyors lesz a kereső.

    Jól látom, vagy félre értettem valamit?

    Mutasd a teljes hozzászólást!
  • De hát pont ez írtam...

    Legyen három táblád:

    1. Szoba. Szobaszám, hivatkozás a szobatípus táblára.
    2. Szobatípus. Szobatípus neve, mindenféle egyéb leíró adatok.
    3. Szobatípus intervallum kezelő tábla. Ez egyfelől hivatkozik a szobatípus táblára, másfelől van benne egy from-to paraméter ami az adott rekord érvényességi idejét állítja be. És persze egyéb leíró adatok.

    A hármas tábla fogja leírni, hogy a kettes táblában definiált szobatípusunk mondjuk január és március között 10000 forint, március és julius között 20.000 forint.
    Mutasd a teljes hozzászólást!
  • Igen, ezt így értem, csak azt nem tudom hogy csináljam hogy ha a szállásadó előre meghatározza a kiadó szobák pontos dátumát és a hozzá tartozó adatokat, akkor azt hogy mentsem el és milyen táblába.
    Ez volna az egyik legfontosabb. Ha ez megvan akkor már hozzá tudom igazítani a szálláskeresőt meg a foglalási rendszert.
    A lényeg hogy minden regisztrált szállás kap egy teltháznyilvántartói hozzáférést ahol a saját szállása adatait meg tudja határozni előre.
    Az igazi problémám az, hogy ha a szállásadó bemegy a teltháznyivántartójába és előre meghatározza hogy pl: 2012.Július.4 -én van 3 szoba kiadó, szobaár 2000, félpanzió, 1400, ...stb akkor ezt milyen táblába mentsem? Ezen kívül persze 2 évre előre bármelyik időszak árait, adatait meg tudja határozni minden egyes szállásadó.
    Ebben az adatbázisban egy országos szintű (sőt még külföldi) szállások is lesznek nyilvántartva és előre láthatóan több 1000 lesz.

    lacusx: köszi a szerkezetet, ezt értem, de ugyanaz a problémám amit az előbb leírtam.
    Ha az időpontok és egyéb szállás adatok tárolása megoldott, akkor a foglalással és a szálláskereséssel már nem lesz gondom.
    Mutasd a teljes hozzászólást!
  • Havi tábláknak semmi értelme nincsen. Gondolj csak bele, amikor egy foglalást vagy bármilyen időfüggő adatot akarnál ellenőrizni, a proginak mind a 12 táblán végig kellene rohannia...ez így borzasztó csúnya.

    Én úgy csinálnám, hogy az egyes szoba kategóriákat két tábla írja le. Van egy header, ami a fix adatokat (kategória neve) stb stb tartalmazza, és egy detail tábla, ami ehhez fk-val kapcsolódik. Ebben van egy from és to paraméter, ami leírja hogy az adott kategória beállítás milyen intervallumban érvényes, aztán pedig a különféle időfüggő paraméterek következhetnek. (Mint pl az ár, esetleg az ágyak száma stb.)

    A foglalásoknál hasonlóképpen: Egy táblában rögzíted, hogy melyik ügyfél id, melyik szoba id-t fogja mettől meddig.


    Így egy sokkal áttekinthetőbb struktúrát fogsz kapni.

    Amikor foglalsz, először a foglalás táblában megnézed, hogy az adott szoba szabad-e az adott periódusban. Ha igen, ráugrasz a kategória detail-re, és megnézed, hogy az adott időszakban milyen viselkedést ír le. Nyilván problémát okozhat, hogy lehetnek törések, tehát egy foglaláson belül két féle kategória is érvényes lehet, az mondjuk már egy tervezői döntés, hogy ilyet megengedsz-e és ha igen, hogy kezeled le.
    Mutasd a teljes hozzászólást!
  • Ha elfogadsz egy tippet:

    szállás_cat
    -----------
    szállás_cat_id
    szállás_cat_name


    szoba_cat
    ---------
    szoba_cat_id
    szoba_cat_name


    szállás
    -------
    szállás_id
    szállás_cat_id
    szállás_name
    ... szállás többi adata


    szállás_szoba
    -------------
    szállás_szoba_id
    szállás_id
    szoba_cat_id


    foglalások
    ----------
    foglalás_id
    szállás_szoba_id
    foglalás_kezdete (YYYY-MM-NN OO:PP)
    foglalás_vége (YYYY-MM-NN OO:PP)
    .. foglalás többi adata


    Ez így elég nyers táblaszerkezet, ki kell egészítened a kívánt adatokkal. Aztán már csak a megfelelő lekérdezéseket kell megírni hozzá.
    Mutasd a teljes hozzászólást!
  • Azt mondod hogy a havi tábláknak semmi értelme, akkor te hogy oldanád meg hogy minden szállás kiadó szobái el legyen mentve dátum szerint napra, hónapra, évre pontosan?

    És persze a szálláshoz tartozó többi adat is.
    Mutasd a teljes hozzászólást!
  • Olvasgatom köszi, de ha van ötleted szívesen meghallgatom.
    Mutasd a teljes hozzászólást!
  • Végiglépkedek a januar táblán ott ahol van kiadó szoba és minden rekordnál megnézem hogy január 25 -től a mező értéke nem-e 0.

    Ugyanígy a februar táblán is ott ahol van kiadó szoba csak ott 5 -ig ellenőrzöm a mezők értékét.

    pl:

    $tol=25; $ig =5; $t =array("januar","februar"); foreach($t as $table_name){ /* Lekérem a táblából azokat a rekordokat ahol vannak kiadó szobák */ $s=mysql_query("SELECT * FROM $table_name WHERE opcio = 'Kiadó szobák'"); while($r=mysql_fetch_assoc($s)){ /* Megnézek minden rekordot hogy melyik napra van kiadó szobája */ for($i=0;$i<=31;$i++){ if($table_name=="januar"){ if($r["d$i"]>0&&$r["d$i"]!=NULL&&$i>=$tol){ $ev_t[] =$r['ev']; $szallas_id_t[]=$r['szallas_id']; $szoba_cat_t[] =$r['szoba_cat_neve']; $nap_t[] =$r[$i]; } } if($table_name=="februar"){ if($r["d$i"]>0&&$r["d$i"]!=NULL&&$i<=$ig){ $ev_t[] =$r['ev']; $szallas_id_t[]=$r['szallas_id']; $szoba_cat_t[] =$r['szoba_cat_neve']; $nap_t[] =$r[$i]; } } } } }

    Ezután már a tömbökben van minden adat a szállásról ami alapján ki tudom keresni a szállás nevét. Minden tömb egyforma indexe ugyanahhoz a szálláshoz tartozik.
    Így már egyszerűen csak végiglépkedek rajtuk egyszerre egy ciklussal és egymás után íratom ki a szálláshely nevét.
    Persze ha ezek az adatok már megvannak akkor már minden egyéb adatot is lekérdezhetek.
    Mutasd a teljes hozzászólást!
  • Szerintem fusd át ezt.
    Mielőtt nekiállsz tákolni. Az ilyen havi tábláknak semmi értelme.
    Mutasd a teljes hozzászólást!
  • Arra gondoltam hogy csinálok minden hónapnak egy táblát.
    Biztos, hogy csak hónapon belüli foglalás lesz? Hogyan keresel, ha Gipsz Jakabnak január 25 - február 05 közötti időszakra kell szállás?
    Mutasd a teljes hozzászólást!
  • Üdv!

    Csinálnom kell egy szállásnyilvántartó adatbázist és most meg kell terveznem a teljes adatbázis struktúráját amihez egy kis segítséget kérnék.
    Ez egy országos szintű telt ház és szállás nyilvántartó adatbázis lesz rengeteg szállással.
    A rendszer nem túl bonyolult csak mivel nagy adatbázis lesz így szeretném a legoptimálisabb táblastruktúrát kialakítani ami könnyen karbantartható, fejleszthető és a szálláskereső is könnyen rátalál a keresett szállásra bizonyos feltételek alapján.

    A feladat a következő:

    Szálláshelyek mint szállásadók beregisztrálnak az oldalra. A regisztrációnál megadott "Szálláshely neve" -t egy táblába mentem.
    Ezután az új szállás már hozzáfér a teltház nyilvántartó rendszerhez és ott létre tud hozni szoba kategóriákat.
    A szoba kategória beállításai:
    Kiválaszt egy időintervallumot dátum -tól -> -ig és akkor megjelenik egy naptár szerű táblázat ahol előre megtudja határozni a szoba árát tetszése szerinti időszakra napra pontosan akár 2 évre előre.
    Ezen kívül még vannak egyéb beállítási lehetőségek mint pl: reggeli, félpanzió, kiadó szobák száma, idegenforgalmi ado ...stb.
    Ezeket az adatokat adatbázisba kell menteni.
    Ez csak 1 szállás volt de ugyanígy számtalan szállás lesz majd a rendszerbe, és egy nagyon jól működő struktúrát kell kialakítani neki.

    Van egy elképzelésem hogy szerintetek ez így jó lesz-e, (várom a véleményeket), vagy ha van jobb ötletetek akkor azt szívesen fogadom.

    Csinálok egy táblát

    Az id AUTO_INCREMENT csak azért kezdem 12 vel hogy jobban tudjam illusztrálni hogy mit szeretnék.

    id | szallas_neve ---+------------- 12 | Apartman 1 ---+------------- 13 | Diákszálló ---+------------- 14 | Vendégház 2 ---+-------------
    A szoba_cat -ban vesszővel elválasztva felsorolom és mindig UPDATE -elem ha új kategóriát vesznek fel.
    Majd explode -al feldarablom a megjelenítésnél.
    id | szallas_id | szoba_cat ---+------------+------------------------------------------ 1 | 12 | kis szoba, erkélyes szoba, medencés szoba ---+------------+------------------------------------------ 2 | 13 | 2 ágyas, 3 ágyas, 4 ágyas ---+------------+------------------------------------------ 3 | 14 | zöld szoba, piros szoba, sárga szoba ---+------------+------------------------------------------
    Így most megvan a regisztrációkor megadott szállás neve, és azok a szoba kategóriák
    amiket létrhozott a szálláshoz a felhasználó.

    Most a kiválasztott időpontokban megadott információkat el kell menteni.
    Na, itt vagyok meg akadva hogy milyen legyen a táblastruktúra.

    Arra gondoltam hogy csinálok minden hónapnak egy táblát.
    (januar, februar,..stb...december)
    Ezeknek a tábláknak így képzeltem a struktúráját:
    /*** januar tábla ***/ id | ev | szallas_id | szoba_cat_neve | opcio | d1 | d2 | d3 | d4 | d5 | ....stb d31 ---+------+------------+----------------+--------------+----+----+----+----+----+-------------- 1 | 2012 | 12 | kis szoba | Egyágyas | | | | 200| | ---+------+------------+----------------+--------------+----+----+----+----+----+-------------- 2 | 2012 | 13 | 3 ágyas | Szobaár | | |3500| | | ---+------+------------+----------------+--------------+----+----+----+----+----+-------------- 3 | 2012 | 13 | 2 ágyas | Félpanzió | | | |1500| | ---+------+------------+----------------+--------------+----+----+----+----+----+-------------- 4 | 2012 | 13 | 2 ágyas | Kiadó szobák | 3 | 0 | 0 | 8 | | ---+------+------------+----------------+--------------+----+----+----+----+----+--------------

    Ugyanígy csinálok az összes hónapnak egy táblát. A szálláskeresőt meg úgy akarom megcsinálni
    hogy a megadott feltételek alapján keres ezekben a táblákban.
    Ha pl: valaki arra keres rá hogy hol van szoba kiadó, akkor ez a tábla szerint a kereső
    kidobja a találati listába hogy :

    1. Január 1, 3 szoba foglalható, 2 ágyas, Diákszálló
    2. Január 4, 8 szoba foglalható, 2 ágyas, Diákszálló

    Ha van találat akkor a többi adatot már célzottan a szallas_id alapján végignézem újra a táblát
    és minden adatot kiíratok WHERE szallas_id = '13' && szoba_cat_neve = '2 ágyas'.

    Ez mondjuk kiadja az aktuális sor teljes tartalmát január 1 -től 31 ig, de nem gond mert az első
    találatknál már szerepel a pontos dátum és csak ki kell vennem belőle mondjuk a január 4. értékét
    és ott lesz pl: a félpanzió ára.

    A kérdés az hogy szerintetek jó lesz ez így, vagy inkább gondoljam át mégegyszer :)
    Vagy legyenek az opciók is külön táblában???

    Előre is köszönöm a segítséget és a jó ötleteket.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd