Rendelkezésre állási időtábla tárolása adatbázisban

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!

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.

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.

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,
...,
},
...
}
}

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.

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.

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.

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.