2011-06-24 3 views
1

En général, nous pouvons utiliser une clé unique ou une clé primaire pour empêcher cela, mais dans mon cas. Je crée une table MyFavorite comme ceci:SQL - Comment éviter les doublons dans des conditions spécifiques?

 
--------------------------------------------------------- 
| UserName  | FavoriteLink      | 
--------------------------------------------------------- 
| Ryan   | http://www.google.com    | 
--------------------------------------------------------- 
| Ryan   | http://www.yahoo.com    | 
--------------------------------------------------------- 
| Joyce   | http://www.google.com    | 
--------------------------------------------------------- 
| Joyce   | http://www.cnn.com    | 
--------------------------------------------------------- 

Ainsi, chaque utilisateur peut avoir beaucoup de favoritelinks, mais ils ne devraient pas avoir double favoritelink, par exemple, Ryan ne devrait pas avoir deux favoritelink pour http://www.google.com. mais pour cette table, le champ FavoriteLink peut être dupliqué, car à la fois Ryan et Joyce, ils ont tous favoritelink pour http://www.google.com.

Voici la question: comment puis-je insérer des données dans ce tableau sans dupliquer FavoriteLink pour une personne en particulier?

+0

Vous mentionnez des clés uniques - comment celles-ci ne conviennent-elles pas dans cette situation? –

+0

@Will: Je suppose qu'il ne savait pas sur les touches composites, et que faire un lien unique signifierait qu'un seul lien est admissible (par opposition à combo unique de lien + utilisateur) – Amadan

Répondre

3

Vous pouvez ajouter un index composite unique.

CREATE UNIQUE INDEX username_favorite_uniq ON yourTable (UserName, FavoriteLink) 
4

Touches composites.

CREATE TABLE userlinks (
    user VARCHAR(255), 
    link VARCHAR(255), 
    PRIMARY KEY (user, link) 
) 

ou

CREATE TABLE userlinks (
    id INTEGER AUTO_INCREMENT PRIMARY KEY, 
    user VARCHAR(255), 
    link VARCHAR(255), 
    UNIQUE KEY (user, link) 
) 

en fonction de ce exactement ce que vous voulez.

+0

Merci! Ça marche!! – Ryan403

Questions connexes