2014-11-11 3 views
0

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

+0

вы объясните еще кое-что, как ваши поля и таблицу. И какое дублирование вы хотите избежать. – Sandesh

+1

Я согласен с @Sandesh - чего вы хотите избежать? Вы хотите заблокировать пользователя, вставляя повторяющиеся данные, или хотите сохранить несколько строк с одинаковыми данными? вы хотите, чтобы ошибка отображалась, или просто продолжайте, как будто ничего не случилось? – ShayD

+0

Как дублируются записи в системе? Являются ли пользователи, отправляющие данные более одного раза? Вводят ли несколько пользователей одни и те же данные? –

ответ

1

Вы можете использовать UNIQUE constraints по столбцам или по набору столбцов, которые вы не хотите дублировать; см. также http://www.w3schools.com/sql/sql_unique.asp.

Вот пример как один столбец и несколько столбцов уникального ограничения:

CREATE TABLE [Person] 
(
    … 
    [SSN] VARCHAR(…) UNIQUE, -- only works for single-column UNIQUE constraint 
    … 
    [Name] NVARCHAR(…), 
    [DateOfBirth] DATE, 
    … 
    UNIQUE ([Name], [DateOfBirth]) -- works for any number of columns 
) 
1

Идентификатор для стола почти обязателен в зависимости от меня. Чтобы избежать дубликатов при вставке строки, вы можете просто использовать:

INSERT IGNORE INTO Table(id, name) VALUES (null, "blah") 

Это работает в MySQL, я не уверен, что SQL Server.

+0

AFAIK, этот точный синтаксис не существует в диалоговом окне SQL Server SQL (T-SQL). Вместо этого используйте ['MERGE ... WHEN NOT MATCHED'] (http://msdn.microsoft.com/de-ch/library/bb510625.aspx). – stakx

1

Есть несколько способов сделать это. Если у вас есть уникальный индекс в поле, и вы пытаетесь вставить дублирующее значение SQL Server с ошибкой. Я предпочитаю способ, чтобы проверить наличие перед вставкой с помощью

IF NOT EXISTS (SELECT ID FROM MyTable WHERE MyField = @ValueToBeInserted) 
BEGIN 
    INSERT INTO MyTable (Field1, Field2) Values (@Value1, @Value2) 
END 

Вы также можете вернуть значение, чтобы вы знаете, если INSERT проходил с использованием ELSE на приведенном выше коде.

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