Felhasználói beállítások tárolása adatbázisban. Jól értelmezem az alábbiakat?
Most utánanéztam egy és elvileg úgy a jó, hogy van egy tábla a beállításoknak és van egy kötőtábla, ami a felhasználó ID-ját és a beállítás ID-ját tartalmazza tulajdonképpen.
Valahogy így:
Setting
- Id
- Name
- Value
UserSetting
- Id
- SettingId
- UserId
Egyrészt nem tudom, ez-e a legjobb gyakorlat másrészt mindig belebonyolódom.
Mondjuk egy vicces példa, de az enyém ehhez hasonló.
Ha a felhasználó kedvenc növénye a kaktusz, akkor egy kaktusz a weblap háttere, ha rózsa, akkor pedig az.
Setting
Id | Name | Value
-----------------------------
1 | BackgroundPic | Rose
2 | BackgroundPic | Cactus
UserSetting
Id | SettingId | UserId
-----------------------------
1 | 1 | 1
2 | 2 | 2
3 | 1 | 5
4 | 2 | 4
Így kellene valahogy tárolni?
És a usersettings tábla tartalmazná az összeset tehát kevesebb soron kell végig menni
Tehát pl
Background
Id | Name
-----------------------------
1 | Rose
2 | Cactus
Valami
Id | Name
-----------------------------
1 | Tul 1
2 | Tul 2
...stb
UserSetting
Id | Background | Valami | UserId
-----------------------------
1 | 1 | 1 | 1
2 | 1 | 2 | 2
..stb
# 5
Igen, ezt olvastam hátrányként. :/
Viszont nem tudom előre, milyen beállítások lehetnek még. Tényleg nem tudom, jelenleg egyetlenegy, de lehet még bármennyi, bármilyenek.
A UserSetting tábla szerintem praktikus lenne, ha csak SettingId-ből, UserId-ből állna. A későbbiekben ne kelljen bővülnie új oszlopokkal.
Nem érzem ezt most egyszerűnek és példát se láttam rá még sehol. :D
És akkor simán mehet az 1 - 1 kapcsolat a a usertábla és a usersettings tábla között, mert így meg 1 - * kapcsolat kell, amit rosszabb menedzselni, hiszen validálnod kell mindent, hogy nehogy két háttérkép kerüljön egyemberhez stb. De ha 1 - 1 kapcsolat van akkor csak egy usersettings tartozhat hozzá és a user settings rekodjába szerepelnek idegenkulcsként a többi beállítás táblája. Én így csinálnám. Könnyebb kezelni, biztonságosabb, gyorsabb lesz a lekérdezés, illetve a bővítés sem nehéz. Plusz minden táblába lehet egy Default érték is, tehát ha nem választ semmit akkor a defult lesz. ;)
Az nem baj, hogyha mondjuk egy Adatbázis sok táblából áll. :)
És arra is gondolj, hogy az adatbázist használnod kell például a szoftverben, amit majd csinálsz, vagy a webalkalmazásodban.
Tehát, például az alkalmazásodba lesz egy beállítások gomb, ahol mondjuk ott a Háttérkép, Betűméret ... stb Mondjuk van 10-20 féle különböző konfiguráció és neked 1 táblában van az összes beállítás belezsúfolva. Például van 5 háttérkép az elején utána 5 betűtípus, de aztán még 2 háttérképet utolag beraksz akkor azok sem sorrendben lesznek, de még mellette van másik 200 felé és mondjuk pl combobox-ok vannak a beállítások kiválasztására vagy checkbox-ok ..stb akkor minden egyes ilyen felületre az egész settings táblán végig kell menned kiszedni az adatokat és úgy berakni. Nem lenne jobb, ha a háttérkép comboboxba csak a háttérképek táblát kéne lekérdezni és a nevet belerakni? :) Szóval gondolj arra, hogy későbbiekben ezzel, hogy fogsz dolgozni. Érdemes teszteket csinálni.
én ilyen esetben ha RDBMS-ben kell tárolnom "valamennyi" oszlopot és nem kell benne keresnem, akkor JSON vagy tömb típust használok.
alapvetően úgyis a felhasználó azonosító alapján keresed ki a rekordot. a beállítások pedig csak egy szimpla oszlop.
igazából ha van rá mód akkor létrehozhatsz hozzá saját típust is, tehát amolyan nested table megoldás is jó lehet (bár ez nyilván mysql-ben mondjuk nem érhető el) de a json vagy array type azt hiszem ott is van és a keretrendszerek esetén már a model-nél tudod castolni, szóval a user objektumban már tömbként jelenik meg a "settings".
gyors, egyszerű, könnyen bővíthető és nincs reduncancia.
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!