Таблица SQL - полууникальная строка? - PullRequest
1 голос
/ 08 января 2010

У меня есть таблица SQL со следующей структурой:

PK (int, primary key), userID (int), data (varchar 64)

В принципе, любому пользователю, как определено userID, разрешено хранить любое количество коротких строк. Однако ни одному пользователю не разрешается хранить две одинаковые строки (хотя пользователь 1 и пользователь 2 могут хранить одну и ту же строку отдельно). Я хотел бы, если это вообще возможно, реализовать это ограничение на уровне базы данных, поскольку структурные ограничения IMHO всегда должны быть в таблицах, , а также в программах, вставляющих / считывающих данные из таблиц.

Единственное, о чем я могу подумать, - это добавить третий столбец, в котором я объединяю userID и данные при каждой вставке, и называю , что уникальный столбец, но мне это кажется слишком «хакерским». Я открыт для полной реструктуризации моих таблиц, если у одного из вас, ребята, есть лучший способ сделать это, что позволит мне наложить это ограничение на поля:)

Спасибо!
Мало

Ответы [ 5 ]

5 голосов
/ 08 января 2010

Похоже, вам нужно составное уникальное ограничение на столбцы userID и data.

как это:

CONSTRAINT my_contraint_name UNIQUE ([userID], [data])
3 голосов
/ 08 января 2010

Что если у нас есть уникальное ограничение на UserId и Data. Я надеюсь, что это должно решить вашу проблему.

2 голосов
/ 08 января 2010

Вам нужен составной ключ, который вы можете добавить в свою таблицу tablename, например, в MySQL:

ALTER TABLE `tablename` ADD UNIQUE KEY (`userID`, `data`);
1 голос
/ 08 января 2010

Я думаю, что самым простым решением было бы создать индекс

create unique index ui on table (userID, data)

хотя с этим могут быть накладные расходы.

Этот вид выглядит так, как будто он также должен быть вашим первичным ключом, хотя это действительно зависит от роли PK и userId в таблицах в остальной части схемы.

0 голосов
/ 08 января 2010

Я думаю, что составной ключ выполнит задачу. Создайте составной ключ с UserId и столбцами данных. В этом случае, когда пользователь пытается вставить одни и те же данные более одного раза, он выдаст ошибку, которую вы можете обнаружить в своем приложении, и покажет пользователю соответствующее сообщение об ошибке.

Надеюсь, это поможет ...

Спасибо.

...