#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:
Будет добавлен второй. Вы можете избежать этого, создав уникальное ограничение.