Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2016-04-09, 18:48
  #1
Medlem
Rabbahs avatar
Skapar tabeller i databas som skall kunna hämtas, och kommunicera med Forms. En inloggning.

Kod:
Tabell för användare.

AnvändareID(primär) - Förnamn Efternamn

Tabell för login
.

InloggID(primär) - Användarnamn Lösenord

Nu måste jag sammankoppla dessa två
Så långt har jag skapat ytterligare en tabell.

ID(primär) - AnvändareID InloggningID

CONSTRAINT 
[FK_AnvändarnaFOREIGN KEY ([AnvändareID]) REFERENCES [Användare]([AnvändareID])
CONSTRAINT [FK_InloggningarFOREIGN KEY ([InloggID]) REFERENCES [Inloggning]([InloggID]) 

Blir det riktigt att skapa två stycken foreign keys på detta vis för att refererera till tabellerna?
Citera
2016-04-09, 19:17
  #2
Medlem
John-Pauls avatar
Varför behöver tre tabeller?
Om du har användarna i en tabell. AnvändareID(PK), Förnamn, Efternamn, ....

Och inloggningarna i en tabell
InnloggningID(primär) - AnvändareID(FK), Tidpunkt, ....

Så räcker kanske det till att börja med?
Citera
2016-04-09, 19:50
  #3
Medlem
Rabbahs avatar
Beklagar om jag surrar.

Första tabell består av följande attribut.

AnvändareID(PK) , Förnamn, Efternamn....

Tabell nr 2.

InloggningsID(PK), Användarnamn, Lösenord..

tabell nr 3.

ID(PK), AnvändareID, InloggningID.

Detta förändrar möjligen situationen?

Jag tänker att AnvändareID och InloggningID bör sammankopplas under ett unikt ID.
__________________
Senast redigerad av Rabbah 2016-04-09 kl. 19:52.
Citera
2016-04-09, 20:01
  #4
Medlem
Xer0s avatar
Du borde egentligen inte ha en separat tabell med lösenorden.

Gör en tabell i stället:

Kod:
Users:
user_id, username, password_hash, given_name, surename

Sen en annan tabell för själva inloggningarna:
Kod:
Sessions:
session_id, user_id, login_time

typ.
__________________
Senast redigerad av Xer0 2016-04-09 kl. 20:08.
Citera
2016-04-09, 20:10
  #5
Medlem
Rabbahs avatar
Citat:
Ursprungligen postat av Xer0
Du borde egentligen inte ha en separat tabell med lösenorden.

Gör en tabell i stället:

Kod:
Users:
user_id, username, password (hash), full_name

Sen en annan tabell för själva inloggningarna:
Kod:
Sessions:
session_id, user_id, login_time

typ.


1.Inloggning (iid(PK) + username + password)

2.Användare (aid(PK)namn, efternamn, osv, osv)

3.ai (aid + iid)
foreign key 1 - 1
foreign key 2 - 2

Menar ni att det finns nackdelar att göra på viset ovan och jag istället bör följa era exempel?
Citera
2016-04-09, 20:13
  #6
Medlem
Xer0s avatar
Citat:
Ursprungligen postat av Rabbah
1.Inloggning (iid(PK) + username + password)

2.Användare (aid(PK)namn, efternamn, osv, osv)

3.ai (aid + iid)
foreign key 1 - 1
foreign key 2 - 2

Menar ni att det finns nackdelar att göra på viset ovan och jag istället bör följa era exempel?

Nej, du kan göra så, men jag ser användaren som ett objekt, och då finns det ingen anledning att dela upp i inloggning och användare.

Båda sätten funkar, däremot att ha en tabell till.. bättre att du lägger "inloggningsid" i användartabellen i så fall.
__________________
Senast redigerad av Xer0 2016-04-09 kl. 20:41.
Citera
2016-04-09, 20:25
  #7
Medlem
Rabbahs avatar
Citat:
Ursprungligen postat av Xer0
Nej, du kan göra så, men jag ser användaren som ett objekt, och då finns det ingen anledning att dela upp i inloggning och användare.

Båda sätten funkar, däremot att ha en tablell till.. bättre att du lägger "inloggningsid" i användartabellen i så fall.


Jag har skapat lite flödesschema innan, kanske är jag ute och cyklar..

Programmet väntar på användaren fyller i fälten, username(variabel) + password(variabel). Sedan anropas krypteringsmetod till password. Därefter skapas ett objekt som innehåller (username + krypterat password) som sedan testas i databasen.

Tack för tipset! Får läsa på om detta..
Citera
2016-04-09, 20:32
  #8
Medlem
Xer0s avatar
Citat:
Ursprungligen postat av Rabbah
Jag har skapat lite flödesschema innan, kanske är jag ute och cyklar..

Programmet väntar på användaren fyller i fälten, username(variabel) + password(variabel). Sedan anropas krypteringsmetod till password. Därefter skapas ett objekt som innehåller (username + krypterat password) som sedan testas i databasen.

Tack för tipset! Får läsa på om detta..

Jag vet inte, men om varje användare bara skall kunna ha ett lösenord så finns det ju egentligen ingen anledning att dela upp på flera tabeller. Däremot om samma användare skall kunna ha flera lösenord så måste du ju dela upp det. (1 till * relation i UML).

Och att spara en "halv" användare pga. att vissa saker matas in först tycker jag låter dumt. Spara allt eller inget i det här fallet.
__________________
Senast redigerad av Xer0 2016-04-09 kl. 20:43.
Citera
2016-04-09, 22:13
  #9
Medlem
Rabbahs avatar
Citat:
Ursprungligen postat av Xer0
Jag vet inte, men om varje användare bara skall kunna ha ett lösenord så finns det ju egentligen ingen anledning att dela upp på flera tabeller. Däremot om samma användare skall kunna ha flera lösenord så måste du ju dela upp det. (1 till * relation i UML).

Och att spara en "halv" användare pga. att vissa saker matas in först tycker jag låter dumt. Spara allt eller inget i det här fallet.


Tack för ditt råd!

Då behövs väl endast 1 foreign key?
Citera
2016-04-10, 10:51
  #10
Medlem
John-Pauls avatar
Ja, en FK och en PK's i båda tabellerna kan vara en lösning.

Om en användare bara ska kunna ha ett lösenord så kan du med fördel spara det i en tabell tillsamman med användaren.
En användare behöver säkert vara unik och då kommer frågan om en användare ska kunna byta användarnamn men oaktat detta skulle jag göra en PK i tabellen över inloggningarna.

Användare: AnvändareID(PK), Användarnamn(Unik), Lösenord, Förnamn, Efternamn

Inloggning: InloggningID(PK), AnvändareID(FK), Tidpunkt

Om du sparar AnvändareID, alltså PK'n, i.st.f Användarnamn(Unik) här så håller du öppet för att Användarnamn kan ändras (så länge det inte ändras till det samma som något annat befintligt användarnamn) utan att du då också måste ändra på alla ev. rader i denna tabell där detta användarnamn finns.

Nu kan det vara så att din databas inte accepterar ett unikt index utöver en PK i en och samma tabell med då finns det säkert andra lösningar på det i din databas och lösningen bör ligga i databasen även om du också skapar det i din programlogik.

PK i tabell över inloggningar fyller nu alltså funktionen att om användarnamnet ändras så behöver inte alla ev. rader i inloggningstabellen ändras.
Citera
2016-04-10, 13:25
  #11
Medlem
Rabbahs avatar
Tack för din input!

Jag har lärt mig att stycka upp i mindre tabeller, annars blir väl query väldigt långa?

Det skapar väl mer flexibilitet genom fördelning, där jag enkelt kan se vilka användare som har gjort vad. Går väl blixtsnabbt istället för SQL skall läsa 1,2, 3, 4, 5, 6, 7, 8 x 30 ? När istället kan skrivas 1, 2 x 30

Dessutom skall tabellerna referera till objekt. Har en användare login? osv.

Pedagogiskt sett anser jag att detta ger bättre överblick, och flera tabeller är väl inte till skada, tvärtom?
Citera
2016-04-10, 18:05
  #12
Medlem
John-Pauls avatar
Grovt så representeras ofta ett objekt som en tabell och objektens attribut som kolumner och ingen ytterligare uppdelning i fler tabeller behövs utan skälig orsak. Sen är dom databaser jag känner så snabba att även mycket stora datamängder processas väldigt fort. Man bör oaktat detta alltid välja uppdelningen och nycklar med omsorg.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback