Kezdőoldal » Számítástechnika » Programozás » Egy rekordhoz tartozó napok...

Egy rekordhoz tartozó napok halmazát hogy érdemes tárolni SQL adatbázisban?

Figyelt kérdés

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?



2020. márc. 3. 17:51
 1/4 anonim ***** válasza:

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.

2020. márc. 3. 17:57
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
73%

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

2020. márc. 3. 18:09
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
A napokat nem tárolnám külön, csak egy egész számot 1-7 vagy 0-6 között. Bármikor rekonstruálható.
2020. márc. 3. 19:45
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:

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.

2020. márc. 5. 14:44
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!