Как я могу иметь уникальный столбец во многих таблицах - PullRequest
3 голосов
/ 09 марта 2010

У меня есть десять или более (я не знаю) таблиц, в которых есть столбец с именем foo с тем же типом данных.
Как я могу сказать SQL, что значения во всех таблицах должны быть уникальными.
Я имею в виду, что если (у меня есть значение «1» в таблице 1), я НЕ должен иметь возможность иметь значение «1» в таблице 2

Ответы [ 5 ]

4 голосов
/ 09 марта 2010

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

То, что я имею в виду, это то, что таблица общего идентификатора гарантирует, что у вас не будет дубликатов для вставки (также путем вставки идентификатора в эту общую таблицу), но главное, чтобы гарантировать, что этого никогда не произойдет, - это построить бизнес правила в систему или установление проверочных ограничений для перекрестной ссылки на другие таблицы (что обеспечит уникальность, но ухудшит производительность).

1 голос
/ 09 марта 2010

Вопрос сформулирован расплывчато; если вам нужно сгенерировать столбец, уникальный для нескольких таблиц, используйте GUID строки или общую таблицу генератора идентификаторов; если вам нужно обеспечить уникальность (а значения полей уже есть), используйте триггеры.

Как правило, если вы генерируете значения, вам не нужно ничего применять. Логика генерации, если все сделано правильно, позаботится об этом. Если вы вставляете, скажем, пользовательский ввод, то вы можете и должны применять уникальность во время вставки. Как правило проверки или что-то.

0 голосов
/ 09 марта 2010

Я бы предположил, что, возможно, ваш дизайн имеет недостатки. Почему эти отдельные таблицы? Было бы лучше поместить их в одну таблицу с одним полем идентификатора и другим полем, чтобы определить, что делает эти отдельные таблицы (например, идентификатор пользователя). Затем вы можете прочитать о таблицах разбиения на разделы, если вы хотите, чтобы они были разбиты клиентом по соображениям производительности.

0 голосов
/ 09 марта 2010

Как насчет установки проверочного ограничения для каждой таблицы, например, ID% 10 = N (где N - номер таблицы от 0 до 9). И используйте IDENTITY (N, 10) каждый раз.

0 голосов
/ 09 марта 2010

Вы можете определить поле как GUID (или UNIQUEIDENTIFIER на сервере SQL). Тогда он всегда будет уникальным, несмотря ни на что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...