Философия уникального идентификатора в моем scneario

#sql #sql-server #sql-server-2005 #sql-server-2008

#sql #sql-сервер #sql-server-2005 #sql-server-2008

Вопрос:

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

Ответ №1:

Если ваши три столбца, не содержащие идентификаторов, не имеют ограничения уникальности и не являются частью первичного ключа, вы можете добавить несколько строк с точно такими же значениями.

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

Если вы не можете использовать ограничение уникальности, одним из способов избежать дубликатов было бы: когда вы собираетесь вставить запись, сначала проверьте, существует ли запись уже, и если она уже существует, решите, как вы хотите с ней справиться.

Комментарии:

1. @aaaaaaa Как насчет их трех вместе, это уникально?

Ответ №2:

Если ваша цель — обеспечить уникальность по трем столбцам, тогда у вас в основном есть выбор из двух структур:

 Create Table tbl_1
(
ColA int
,ColB varchar(32)
,ColC varchar(256)
,Primary Key (ColA, ColB, ColC)
)
GO
  

или

 Create Table tbl_2
(
ID int identity(1,1) Primary Key
,ColA int
,ColB varchar(32)
,ColC varchar(256)
,Unique (ColA, ColB, ColC)
)
GO
  

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

С другой стороны, если вы просто пытаетесь установить PK для данных, которые могут быть уникальными, а могут и не быть, вы можете использовать структуру 2, но без ограничения уникальности. В этом случае каждая строка однозначно идентифицируется столбцом ID, но значения других столбцов могут свободно повторяться.

Ответ №3:

Будет добавлен второй. Вы можете избежать этого, создав уникальное ограничение.