Egy rekordhoz tartozó napok halmazát hogy érdemes tárolni SQL adatbázisban?
Van egy "feladat" tábla amiben egy rekord egy feladatot reprezentál és a feladatot mondjuk hétfőn, szerdán és pénteken kell végrehajtani.
A hétfő, szerda, péntek értékeket milyen formában érdemes tárolni a "feladat" táblában, hogy performancia szempontjából is jó legyen a megoldás?
Szöveges értékként érdemes egy oszlopban? Vagy külön oszlop minden egyes napnak, vagy hogy lenne a legjobb?
Teljesítmény szempontjából nem a legjobb, de átláthatóság/tervezhetőség szempontjából az a legjobb, ha 3 tábla van.
1 táblában tárolod a feladatokat (id-vel).
1 táblában a napokat tárolod (szintén valami egyedi sorszámmal, akár 1-7)
és 1 tábla összeköti, azaz abban feladatsorszám-napsorszám párosítások szerepelnek.
Ez azért jó, mert ha bővíteni akarod például, hogy 2 hetes ciklus, akkor tudsz páros hétfő-páratlan hétfőt is hozzáadni, illetve nyers szövegként nem jó napot tárolni, már csak nyelv szempontjából sem (például ha angol és magyar is lenne az oldal).
A lekérdezés minimálisan több ideig tarthat, de az sql engine-ek általában jól optimalizálni tudják ezeket.
Bitsetben tárolnám.
Csak 7 nap van ugye, úgyhogy pont beleférsz akár egy (signed) byte-ba is, szóval adatbázistól függően tinyint, smallint stb. adattípus elég.
Hétfő - 1
Kedd - 2
Szerda - 4
Csütörtök - 8
...
Vasárnap - 64
Hétfő, szerda, péntek - 21
Attól függ mennyire komplexre/rugalmasra akarod csinálni az ütemezési lehetőségeket. Ha tényleg csak annyi, hogy hetente ismétlődik, és csak azt kell megadnod mely napokon fusson, akkor hét darab igen/nem oszlop a legegyszerűbb. Lehet bitmap-pel is, vagy egy string oszlopban összekonkatenálni a napok kódjait, de a legelegánsabb a külön oszlopok.
Amennyiben azt akarod, hogy pl. korlátlan számú egyedi dátumot is meg lehessen adni, akkor egy gyerektáblát csinálj. Akkor is érdemes megfontolni, ha az igen/nem mellett sok más adatot is kell még tárolni minden egyes futáshoz. (Pl. adott napon milyen időben fusson, milyen paraméterekkel etc.) Harmadik kapcsolótábla amit #1-es írt semmiképpen nem kell, arra csak a sok-sok kapcsolatoknál van szükség, egy egyszerű külső kulcs elég.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!