Hello mindenki,
a segítségeteket szeretném kérni a következő megoldására: különböző felhasználók rendelkezésre állásának az időtábláját kellene eltárolnom MySQL-ben. Az a helyzet, hogy 63 darab igen / nem mező van, amin nem tudok egyszerűsíteni. A felületen ixelhetőek a külöböző időablakok egy táblázat formájában. A tábla felső fejlécében a Hétfő, Kedd, Szerda, Csütörtök, Péntek, Szombat és Vasárnap oszlopnevek szerepelnek, a táblázat bal leírásában pedig 06-08, 08-10 .. 20-22, 22-24 óráig a mezők. Ez 7×9 = 63 pipálható mezőt jelent (24 órától hajnal 06-ig nincs bejelölhető ablak). Ennek az esetnek a tárolását kellene megoldanom adatbázisban.
Eddig egy ötlet merült fel, mégpedig, hogy létrehozok minden naphoz egy táblát, amelyekben lesz 10 darab oszlop: userID, elsoAblak, masodikAblak .. kilencedikAblak. Azt gondolom, hogy ennél azért van szofisztikáltabb megoldás is, de én még nem jöttem rá.
Segítségeteket előre is köszönöm!
- 2880 megtekintés
Hozzászólások
Jelenleg egyébként úgy van megoldva, hogy egy 63 karakter hosszú bináris számsor van tárolva. Ezt nem én csináltam és nem is akarnám a tárolását ebben a formában folytatni.
Vizuális típusoknak: 000000000000000000000000000000000000000000000000000000001111000 -> ez azt jelenti, hogy vasárnap elérhető a személy 10től 18 óráig.
-----------------------------------------------------------
Minden lehetséges, csak a lehetetlen tovább tart.
- A hozzászóláshoz be kell jelentkezni
Ez még akár elviselhető is volna, ha legalább napokra volna bontva a bináris sztring.
De a nagykönyvi megoldás fentebb szerepel a 3 táblával - cél és ízlés kérdése, hogy adott nap adott szeletére tárolsz-e bármit, ha ott nem áll rendelkezésre a kolléga, vagy a nincset a nincs rekorddal jelzed.
- A hozzászóláshoz be kell jelentkezni
MongoDB nem jöhet szóba?
"felhasznalo":{
"nev": "Felhasználó neve",
"egyebAdat": "Egyéb információk...",
"napok": {
"2014-10-17": {
"8-10" : true,
"10-12" : false,
...,
},
...
}
}
- A hozzászóláshoz be kell jelentkezni
Nem sajnos. De ha az megoldaná a problémát, akkor eltárolnék JSON-t. Viszont ha 1 hónap múlva változna az időablakok száma, akkor baszhatom - ezért kéne valami univerzális megoldás.
-----------------------------------------------------------
Minden lehetséges, csak a lehetetlen tovább tart.
- A hozzászóláshoz be kell jelentkezni
Remélem, jól értem a problémád. Előre elnézést, ha nem.
Szóval én 3 db táblát készítenék:
- Nyilvantarto(userid, napid, idoablakid)
- Napok(napid, hetnapjai)
- Idoablakok(idoablakid, kezdoidopont, zaroidopont)
Az illesztések egyértelműek. Nem kavarodsz bele abba se, ha változnak az időablakok.
- A hozzászóláshoz be kell jelentkezni
Igen, azt hiszem ez lesz a nyertes.
Megtaláltam én is az ide vonatkozó stackoverflow oldalt, de nem láttam át rendesen.
Link: http://stackoverflow.com/questions/19783680/storing-timetable-availabil…
Köszi szépen!
-----------------------------------------------------------
Minden lehetséges, csak a lehetetlen tovább tart.
- A hozzászóláshoz be kell jelentkezni
Az a kérdés, hogy milyen (relációs) lekérdezéseket szeretnél csinálni az adatbázisban. Az logikusnak tűnik, hogy a user táblához szeretnél tudni joinolni, de ezen felül hogyan kéne adatot lekérdezni a rendszerből?
Ez nagyjából meg is fogja határozni, hogy mi a minimum granularitás, amivel sql szinten külön mezőkbe/sorokba kell az adataidat rakni. Ennél lehet feljebb lépni, amitől ugyan sql szinten "szebb" lesz a tárolásod, de a hatékonyság viszont lefelé megy. Vagy lehet a minimum szinten maradni, és az adott lekérdezéshez szükséges külön mezőkön kívül mindent egy nagy blobba beszórni (bináris, json, akármi formátumban), aztán majd az alkalmazás dekódolja.
- A hozzászóláshoz be kell jelentkezni