база данных, sql сервер, sql какой ключ? - PullRequest
0 голосов
/ 13 августа 2010

У меня есть 1 таблица с 6 столбцами A B C D E F

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

нормально сценарий из реальной жизни -
У меня есть продукт, это морковь, морковь может иметь до 6 значений штрих-кода, но если у меня есть яблоки, штрих-код не должен совпадать ни с одним из значений штрих-кода моркови. Столбцы товара, штрих-код1, штрих-код2, штрих-код3, штрих-код4, штрих-код5, штрих-код6.

Ответы [ 3 ]

3 голосов
/ 13 августа 2010

Если вы пытаетесь навязать уникальность во всех шести столбцах (например, я ввожу 'Foo' в столбце A для строки, тогда столбцы B, C, D, E или F в этой строке не могут иметь ни 'Foo', нилюбая другая строка для столбцов AF), нет встроенного механизма, чтобы сделать это, кроме триггеров.Я подозреваю, что ваши данные не могут быть нормализованы, и это, вероятно, причина неспособности использовать встроенные ссылочные механизмы для обеспечения уникальности.Нам нужно было бы узнать больше о схеме базы данных, чтобы знать наверняка.

ДОПОЛНЕНИЕ

ок, настоящий сенарио из реальной жизни У меня есть продукт это морковь морковьможет иметь до 6 значений штрих-кодов, но если у меня есть яблоки, штрих-код не должен совпадать ни с одним из значений штрих-кода моркови.Столбцы столбцов product, barcode1, barcode2, barcode3, barcode4, barcode5, barcode6,

Нормализованным решением будет сохранение ваших штрих-кодов в другой таблице:

Create Table ProductBarCodes
(
    ProductId ... not null References Products( Id )
    , Sequence int not null
    , Barcode ... not null
    , Constraint PK_ProductBarCodes Primary Key ( ProductId, Sequence )
    , Constraint CK_ProductBarCodes_Sequence Check ( Sequence Between 1 And 6 )
    , Constraint UC_ProductBarCodes_Barcode Unique ( Barcode )
)
0 голосов
/ 13 августа 2010

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

0 голосов
/ 13 августа 2010

Просто поместите уникальный ключ. Нулевые значения считаются разными, поэтому уникальное ограничение не касается нулевых значений.

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