webForumDet fria alternativet

Redundans

Databaser & SQL

3 svar · 807 visningar · startad av Kalle M

Medlem sedan mars 20041 936 inlägg
Frågan#1

Om man har en kundtabell med företag och vill undvika dubbellagring om företag kan ha fler kontaktpersoner. Kan man då lägga upp det på följande sätt?

tblföretag
Kundnr (Primärnyckel)
Företag
Adress
Postnr
Ort mm

Tblkontakt
Kundnr (Ingen nyckel)
Kontaktperson
Tel mm.

Och sedan skapa relation mellan kundnr i tblföretag och kundnr i tblkontakt.
Tänker jag rätt?

Medlem sedan juni 20006 031 inlägg
#2

I Tblkontakt skulle jag ha ett id som var autoincrement, förenklar när man ska redigera/radera en kontakt.
Sen skulle jag en relation, precis som du säger mellan Kundnr och Ref_Kundnr.

Jag brukar sätta ref_ framför fält som har en relation till en annan tabell för att enkelt kunna se det, men det är en smaksak hur man döper sina saker.

tblföretag
Kundnr (Primärnyckel)
Företag
Adress
Postnr
Ort mm

Tblkontakt
Id (autoincrement)
Ref_Kundnr
Kontaktperson
Tel mm.

/red
jag skulle även ha autoincrement på Kundnr, alternativt ett till fält till (id) som var autoincrement.

/red2
Inte något du frågar om, men ett litet tips.
Jag skulle även använda mig av ON DELETE CASCADE så raderas tillhörande kontakter automatiskt om du raderar en kund.

Medlem sedan mars 20041 936 inlägg
#3

Ok!

Du menar att det är bra att ha ett ID längst upp i tblkontakt om man ska bygga databasen vidare?

Medlem sedan juni 20006 031 inlägg
#4

Tänk dig problemet om ett företag har flera kontakter och två av dom heter Anders Svensson.
Hur skriver du din DELETE när du ska radera kontakten?
DELETE FROM Tblkontakt WHERE kontaktperson='Anders Svensson' AND Kundnr=123
Detta kommer radera båda kontakterna. Däremot om varje kontakt har ett unikt id så blir det enklare.
DELETE FROM Tblkontakt WHERE id=1

253 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)