[MySQL] waarop primaire en / of unique key?

Pagina: 1
Acties:

  • remcotolsma
  • Registratie: December 2005
  • Laatst online: 09-10-2025
Ik heb de volgende tabel:

MySQL:
1
2
3
4
5
6
7
CREATE TABLE `files` 
(
  `id` bigint(16) unsigned NOT NULL auto_increment,
  `name` varchar(256) NOT NULL,
  `data` text() unsigned NOT NULL,
  PRIMARY KEY  (`id`)
)

De velden `id` en `name` moeten beide (apart) uniek zijn. Het volgende mag dus:

id - name
1 - naam_1
2 - naam_2
3 - naam_3
4 - naam_4

en dit dus niet:

id - name
1 - naam_1
1 - naam_2 (niet een unieke id)
2 - naam_2 (niet een unieke naam)
2 - naam_3 (niet een unieke id)

De volgende 2 queries zullen (waarschijnlijk) in de toekomst evenveel uitgevoerd worden.

MySQL:
1
2
3
SELECT *
FROM files
WHERE name = 'naam_1'

MySQL:
1
2
3
SELECT *
FROM files
WHERE id = 1

Wel zal er vaker gejoint worden met het `id` veld, dus varianten op onderstaande query zullen wel vaak voorkomen:

MySQL:
1
2
3
SELECT *
FROM files f
  INNER JOIN extra a ON f.id = a.file_id


Ik vroeg me af waar ik nou het beste een primare en unique key op kan zetten. Zoals jullie gezien hebben heb ik nu alleen een primaire key op het `id` veld, maar dit moet dus anders...

Gewoon een primaire key op het `id` veld en een unique key op het `name` veld? Is dat het beste in deze situatie?

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

`id` is een auto_increment field, deze _moet_ dan primary zijn in MySQL :)
Maar je kan toch gewoon nog een unique key aanmaken op `name`? Ik zie het probleem eigenlijk niet.

Verwijderd

of primary key op beide?

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18

KompjoeFriek

Statsidioot

met een primary key op beide zijn de samen uniek, niet apart ;)

oplossing van Erkens is (zoals gewoonlijk) correct :+

WhatPulse! - Rosetta@Home - Docking@Home


  • remcotolsma
  • Registratie: December 2005
  • Laatst online: 09-10-2025
Erkens schreef op donderdag 01 juni 2006 @ 17:58:
`id` is een auto_increment field, deze _moet_ dan primary zijn in MySQL :)
Maar je kan toch gewoon nog een unique key aanmaken op `name`? Ik zie het probleem eigenlijk niet.
Owh jah dat is ook zo, dan blijven er niet veel alternatieven over :P. Bedankt!