Permalänk

MySQL primary key

Hej!

Jag sitter för tillfället och skapar en MySQL databas och har satt upp samtliga av tabellerna.
Jag har dock stött på ett problem som jag inte riktigt vet hur jag ska lösa eller hur det fungerar i sql-databaser.

Låt säga att jag har två tabeller, user och purchase(köp).
I tabellen event så finns det inte en enskild kolumn som kan avgöra den unika raden, jag har därför gått tillväga att sätta två primary-keys men får error att key (fk_user_email) måste vara unik när jag lägger till data i databasen med samma user.
Jag har en one-many (user-event) relation och vill kunna identifiera en rad i event genom att kombinera två primary-keys, är detta möjligt? Att skapa ett unikt id för event är möjligt men undrar ifall detta går att åstadkomma utan detta.

event
| title | date (pk) | fk_user_email (fk) (pk) | price |

user
| email (pk) | password |

Permalänk
Keeper of the Bamse

Eftersom user email är en foreign key, måste du inte göra inserten via en Select FROM (en annan tabell)?

Visa signatur

i7 10770K, NH-D15. 16GB corsair. RTX 3080. 3TB nvme. Samsung G9. Fractal Torrent Compact. Corsair RM850.
Logitech G pro wireless mouse. Logitech TKL915 wireless. Logitech Pro X Wireless.
Macbook M3 (16GB, 512GB). HP Reverb G2.
www.bamseclockers.com

Permalänk
Medlem

Begreppet du söker är "composite key", alltså en primary key som består av två eller flera kolumner och är unika i kombination.

Personligen föredrar jag tekniska nycklar som primary keys, antingen automatiskt genererade heltal eller GUID/UUID (som också kan vara genererade av databasen) och foreign keys som pekar på dessa. Detta kombineras sedan med unika index så att man inte kan lägga in två användare med samma e-mail osv. Men det är en smaksak.

Permalänk
Skrivet av Printscreen:

Eftersom user email är en foreign key, måste du inte göra inserten via en Select FROM (en annan tabell)?

Tack för svaret men inte riktigt det jag sökte.

Skrivet av KAD:

Begreppet du söker är "composite key", alltså en primary key som består av två eller flera kolumner och är unika i kombination.

Personligen föredrar jag tekniska nycklar som primary keys, antingen automatiskt genererade heltal eller GUID/UUID (som också kan vara genererade av databasen) och foreign keys som pekar på dessa. Detta kombineras sedan med unika index så att man inte kan lägga in två användare med samma e-mail osv. Men det är en smaksak.

Super, exakt detta jag var ute efter. Detta löste problemet och jag valde att använda mig utav heltal genom AUTO_INCREMENT som primary key.

Permalänk
Medlem
Skrivet av KAD:

Begreppet du söker är "composite key", alltså en primary key som består av två eller flera kolumner och är unika i kombination.

Personligen föredrar jag tekniska nycklar som primary keys, antingen automatiskt genererade heltal eller GUID/UUID (som också kan vara genererade av databasen) och foreign keys som pekar på dessa. Detta kombineras sedan med unika index så att man inte kan lägga in två användare med samma e-mail osv. Men det är en smaksak.

Jag skulle vilja uppmärksamma att GUIDs är inte helt optimala som primary keys. De gör att man får stor sidfragmentering och därmed sämre prestanda, så sekventiella heltal är att föredra.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607