Avatar billede alex15 Nybegynder
10. december 2007 - 19:32 Der er 17 kommentarer og
1 løsning

Hvordan laver man 2 primary keys? (Brugersystem)

Hej Eksperter

Er i gang med at lave en brugersystem til min hjemmeside. Og vil gerne kunne gøre det på sådan en måde at den enkelte bruger har mulighed for at have 2 brugernavn / 2 email som kan bruges til at logge ind på den pågældende bruger..

hvad skal man skrive for at lave en PRIMATY KEY og en SECOND KEY?

- Hvis dette vel og mærket overhoved er muligt!

Alex
Avatar billede jop... Nybegynder
10. december 2007 - 19:45 #1
Hvorfor ikke bare lave en primary, og så evt. lave den anden som en unik key?
Avatar billede arne_v Ekspert
10. december 2007 - 20:16 #2
Man kan ikke have 2 primary keys, men som jop siger kan man have en primary key og
et unique index.

Men umiddelbart synes jeg nu mere at det lyder som om du vil have:
  - en user tabel med et user id
  - en logininfo tabel med brugernavn og email og en foreign key til user tabel
saaledes at du kan have 2 records i logininfo der peger paa samme record i user.
Avatar billede alex15 Nybegynder
10. december 2007 - 21:18 #3
Arh ja okay.. Hvordan laver man så sådan en unik key? synes ikke rigtig at jeg kan finde nogle hjemmesider som KLART og TYDELIGT gennemgår de forskellige udtryk i sql?!

Hmm.. hvad skulle det gøre som forskel?

Meningen ved det var at 2 forskellige personer f.eks. studiegruppe. Med hver deres mail skal kunne logge ind under samme konto.

Altså skal rækker i tabellen indeholde:

Mail1
kode1
Mail2
kode2
osv osv.

Men skal stadigvæk kun være ÉN bruger.. ikke 2?

- hvis i forstår?
Avatar billede arne_v Ekspert
10. december 2007 - 21:19 #4
CREATE UNIQUE INDEX ...
Avatar billede arne_v Ekspert
10. december 2007 - 21:19 #5
Nej - det er netop felter xxx1 og xxx2 jeg ville undgaa med en ekstra tabel.
Avatar billede alex15 Nybegynder
10. december 2007 - 21:29 #6
Okay.

Sorry, men har lidt svært med at se hvordan den så skal kunne sammenarbejde med det andet table? :S

Må du gerne forklare :)

Hvis man nu skriver følgende ved oprettelse af et table:

<?php
include("connect.php");

mysql_query(" CREATE TABLE users (
email1 int(30) NOT NULL,
password varchar(16),
email2 int(30),
password2 varchar(16),
PRIMARY KEY (email)
)") or die ("FEJL VED OPRETTELSE AF TABLE. Fejlen er følgende: <br><br><b>".mysql_error());

?>

// Hvordan sætter man så en unik key ind? - Har jo allerede sat en ved det første mail? men hvordan gør man så at mail2 også er unik. og ikke kan findes i hverken kolonnel mail1 eller mail2?
Avatar billede arne_v Ekspert
10. december 2007 - 21:40 #7
Du kan goere email1 og email2 unikke hver for sig med:

CREATE UNIQUE INDEX ix_email1 ON users (email1);
CREATE UNIQUE INDEX ix_email2 ON users (email2);

Men skal de vaere unikke ogsaa mellem felterne, saa er der endnu et argument
for min ekstra tabel model !
Avatar billede alex15 Nybegynder
10. december 2007 - 21:58 #8
Men hvor skriver du dette "CREATE UNIQUE INDEX ix_email1 ON users (email1);" ind henne??? er det KUN ved oprettelse af bruger du gør det? other was?

eller hvor skal man præcis skrive det ind henne?

Vil gerne gøre det på den anden måde som du snakker om. Tror bare ikke helt jeg har forstået hvordan det virker?!?

Man opretter en bruger under et table kaldet "users". Denne bruger har så alle mulige infomationer inde i sig. Addresse, tlf nummer. osv osv. Men hvis man så skal oprette et andet table med to andre users / mails, hvordan skal de 2 forskellige table som sammearbejde?
Avatar billede arne_v Ekspert
10. december 2007 - 22:22 #9
Det er en SQL kommando som bruges naar man opretter database.

D.v.s. at den udfoeres lige efter CREATE TABLE kommandoerne.
Avatar billede arne_v Ekspert
10. december 2007 - 22:24 #10
De to tabeller kan "samarbejde" ved at den nye tabel har et felt som peger op paa
den foerste tabel (en foreign key).

Saa er det nemt at joine de to tabeller.
Avatar billede alex15 Nybegynder
10. december 2007 - 22:39 #11
hmm.. Men hvad skulle det overhoved gøre af forskel?? Kan jeg vist stadigvæk ikke rigtig se. For mig virker det stadigvæk som om email1 og email2 er en meget nem løsning. Hvis blot man kan gøre dem begge unikke. Og det virker det jo som om at man kan..! ved denne der formel:

CREATE UNIQUE INDEX ix_email1 ON users (email1);
CREATE UNIQUE INDEX ix_email2 ON users (email2);

Men man skal jo faktisk også chekke den ydeligere 2 gange right?

altså
CREATE UNIQUE INDEX ix_email1 ON users (email1);
CREATE UNIQUE INDEX ix_email1 ON users (email2);
CREATE UNIQUE INDEX ix_email2 ON users (email1);
CREATE UNIQUE INDEX ix_email2 ON users (email2);

Kan man ikke gøre det på den måde?
Avatar billede arne_v Ekspert
10. december 2007 - 22:42 #12
Nej - det kan man nemlig ikke - derfor de to tabeller.
Avatar billede arne_v Ekspert
10. december 2007 - 22:43 #13
xxx1, xxx2, xxx3 som kolonner i en tabel er ikke godt i en en relations database
Avatar billede alex15 Nybegynder
10. december 2007 - 23:18 #14
hmm okay.. Har du en artikel liggende som forklare det lige så godt som den anden artikel som du sendte til mig??
Avatar billede arne_v Ekspert
11. december 2007 - 03:12 #15
Den er lidt svæere.

Måske eksempel 2 herfra http://en.wikipedia.org/wiki/First_normal_form
Avatar billede alex15 Nybegynder
11. december 2007 - 09:05 #16
Okay, prøver lige og læse de 2 artikler igennem. Så vender jeg lige tilbage.. :)
Avatar billede alex15 Nybegynder
05. januar 2008 - 09:48 #17
Sorry jeg først svare tilbage nu. Har bare brugt alt min fritid på PHP. Nærmere betegnet hvordan jeg fik noget login til at virke. (hvilket dog et lykkes nu).

Har dog efterfølgende fundet ud af at jeg gerne vil lave mit bruger system på en anden måde. Menlig denne:

http://www.eksperten.dk/spm/813069

Har smidt 200 point i næste spørgsmål da det er (for mig) og se. Lidt svære og løse.
Avatar billede alex15 Nybegynder
27. februar 2008 - 18:53 #18
lukket
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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