Avatar billede SocialTau Nybegynder
20. juli 2011 - 15:26 Der er 9 kommentarer

Bedste opbygning af user Database

Hej,

Jeg sidder og er ved at lave en database som pt. skal repræsentere en række brugere på en hjemmeside.

Jeg har oprettet en tabel med Users, herunder gemmes password, brugernavn etc sammen med en ID.

Mit problem er at jeg har en række forskellige brugere, og hver af disse brugere skal have forskellige oplysninger gemt om sig. fx

Admin
Teacher
Student

I stedet for at alle disse tre tabeller indeholder den samme data som User, (hvilket også kunne være en løsning) vil jeg lade dem være i tabeller for sig, og herunder referer til User-tabellen.

Det er alt sammen meget snedigt, i det at jeg herunder kan liste alle mine admins, alle mine teacher og alle mine students, og hente deres relevante user data.

Men hvad så når man går den anden vej, altså en situation hvor jeg har en User og gerne vil vide om han er henholdsvis en Admin, Teaher eller Student (eller for den sags skyld alle tre dele).

Jeg ser to muligheder,

1. gennemløbe alle tabellerne og se om nogle af dem har en reference til den pågældende user. (det lyder bare som en krævende proces)

2. gemme enten en reference eller null i User tabelen for hver enkelt af de andre tabeller, så den ved hvilken tabel den skal lave et opslag i.

eller er der en tredje mulighed som måske ville virke bedre?
Avatar billede SocialTau Nybegynder
20. juli 2011 - 15:27 #1
Hov, mit spørgsmål er hvilken af løsninger vil være bedst og hvorfor?
Avatar billede keysersoze Guru
20. juli 2011 - 16:01 #2
Hvis en bruger kun kan have én rolle;

ROLE
id, name

USER
id, username password, roleid
,
Hvis en bruger kan have flere roller

ROLE
id, name

USER
id, username, password

USERROLE
userid, roleid
Avatar billede arne_v Ekspert
20. juli 2011 - 18:13 #3
Jeg ville lave et type felt i user tabellen.

Det goer det ogsaa nmmere den dag du beslutter dig for at bruge et ORM.
Avatar billede arne_v Ekspert
20. juli 2011 - 18:15 #4
keysersoze>

Som jeg laeser spm. saa er det et objekt hiraki ikke et field.
Avatar billede janus_007 Nybegynder
21. juli 2011 - 20:02 #5
Hej SocialTau

Løsning 2 er den normale måde at løse det på :)

Men men inden man rigtigt kan sige noget så.... hvor meget data snakker vi om og hvordan er dataens natur, jeg tænker på hvor mange attributter er er der f.eks til Adminrollen?
Og skal der laves opslag i disse og refereres til User? Jeg tænker på... finder der forespørgsler som alá "Her vises en liste af alle Teachers som kan dit AND dat OR dut?
Avatar billede SocialTau Nybegynder
22. juli 2011 - 12:38 #6
keysersoze -> du beskriver et many to one forhold blandt 2 tabeller.
Det jeg leder efter er et many to one or zero mellem 1 og henholdsvis 3 tabeller, hvor en af de tre tabeller indeholder den ene, og ingen af de andre gør.

Egentlig fandt jeg ud af at den information der skulle bruges om hhv. admin, user og teacher, ikke var nødvendigt, så jeg har dem til at stå som boolean attributer i user.

Men jeg løber faktisk ind  samme strukturelle problem igen nu her hvor jeg skal lave en række pages, som består af pageelements og et page element kan så hhv. være enten:

- text/overskrift
- et billede
- eller en masse radio buttons til en multiplechoice test.

så problematikken er stadig gældende. Og hvis vi kigger på det nye problem i stedet for det gamle så svarer det vel også på dit spørgsmål omkring hvilke attributer etc der hører til de forskellige
Avatar billede SocialTau Nybegynder
22. juli 2011 - 12:40 #7
hov, keysersoze du beskrev et many to many :D
Avatar billede Syska Mester
22. juli 2011 - 12:44 #8
Lyder som om du måske kunne drage nytte af table table inheritance:
http://www.sqlteam.com/article/implementing-table-inheritance-in-sql-server

mvh
Avatar billede janus_007 Nybegynder
22. juli 2011 - 20:10 #9
Social Tau....

Jeg ønsker dig held og lykke med dit trivielle projekt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester