Autor Zpráva
MysqlA
Profil *
Dobrý den, občas narážím na problém, kdy z více tabulek potřebuji odkazovat na jeden sloupeček ID v jiné tabulce. Možná dělám něco špatně už při návrhu.
Příkladem je třeba přihlašování:
tabulka user(id_user, name, email, address)
admin(id_admin, name, email)
login(email, password, access)

Z formuláře získám email a heslo, ty zkontroluju v tabulce login a podle emailu získám access. pokud je access = 1 vypíšu data z tabulky user, pokud = 2 jedná se o admina.

A to není jenom tento případ, například někdy mi nezbyde nic jiného než mít v tabulce jak id_user tak i id_admin a jedna z nich je vždy null. Tohle řešení mi nepřipadá příliš ideální ale stává se mi to docela často. kde dělám chybu? Dík :)
juriad
Profil
User (id, name, email, address, password)
UserRole (user_id, role_id)
Role (id, name)

A můžeš dokonce mít několik různých rolí. Proč chceš heslo uchovávat v jiné tabulce a duplikovat e-mail?

Projdi si tuto prezentaci - tam je to ukázáno na přikladu - Bug je Issue a Feature je Issue.
Joker
Profil
MysqlA:
Proč není všechno v jedné tabulce?

Předpokládám, že user a admin je vlastně totéž a liší se jen úrovní oprávnění. Pak by stačilo v tabulce user mít jen příznak, jestli je admin.

Smysl tabulky login jsem nepochopil- může mít více uživatelů stejný login? Asi ne. Takže více loginů pro stejného uživatele? Možná s různými přístupovými právy? To by možná potenciálně smysl dávalo, ale předpokládám, že mezi uživatelem a loginem je vazba 1:1. Takže údaje z tabulky login mohou být prostě jen další sloupce tabulky user.
MysqlA
Profil *
No jo ale jak pak při přihlašování poznám, jestli se mám kouknout do tabulky user, nebo admin. tyto dvě tabulky nechci sloučit, u uživatele potřebuju uchovávat i jiná data než u admina...
mimochodec
Profil
MysqlA:
Admin je taky jenom člověk. Všechny lidi shrkni do jedné tabulky a jestli ti juriadovo řešení připadá moc složité, možná si vystačíš s jedním sloupcem typu INT(1), který nazveš třeba jetoadmin. To, že tam u některých nebudou ty nebo ty sloupce použité, nevadí.
Joker
Profil
MysqlA:
u uživatele potřebuju uchovávat i jiná data než u admina
V ukázce v [#1] je každý sloupec tabulky admin i v tabulce user, takže minimálně nějaký průnik tam je.

Dobře, tak která varianta víc odpovídá realitě?
A. Admin je vlastně jen uživatel se zvláštními právy. Admin může dělat vesměs to co normální uživatel, ale kromě toho ještě nějaké věci navíc.
B. Administrátoři a uživatelé jsou oddělené entity, nemají mnoho společného. Admin nemůže fungovat jako normální uživatel, kdyby stejný člověk měl být admin i uživatel, bude mít dva různé účty.
MysqlA
Profil *
No myslím že B je správně

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: