SQL - Как предотвратить дублирование в определенных условиях? - PullRequest
1 голос
/ 24 июня 2011

В общем, мы можем использовать уникальный ключ или первичный ключ, чтобы предотвратить это, но в моем случае. Я создаю таблицу MyFavorite следующим образом:

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

Таким образом, у каждого пользователя может быть много избранных ссылок, но у него не должно быть дубликатов избранных ссылок, например, у Райана не должно быть двух предпочтительных ссылок для http://www.google.com., но для этой таблицы поле FavoriteLink может быть дублированным. потому что и Райан, и Джойс, у них всех есть любимая ссылка на http://www.google.com.

Вот вопрос: как я могу вставить данные в эту таблицу без дубликата FavoriteLink для конкретного человека?

Ответы [ 2 ]

4 голосов
/ 24 июня 2011

Композитные клавиши.

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

или

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

в зависимости от того, что именно вы хотите.

3 голосов
/ 24 июня 2011

Вы можете добавить составной уникальный индекс.

CREATE UNIQUE INDEX username_favorite_uniq ON yourTable (UserName, FavoriteLink)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...