2009-04-02 3 views
1

Я задал этот вопрос ранее, но ответы не были тем, что я искал.Уникальная запись в Asp.Net SQL

Я создал таблицу в Asp.net без использования кода. Он содержит два столбца.

YourUserId и FriendUserId

Это отношения многие ко многим.

Вот что я хочу:

Там может быть несколько записей с вашим именем, как UserId, также может быть несколько записей с FriendUserId быть то же самое ... но не может быть несколько записей с обоими быть тем же самым , Например:

Дэйв: Грег

Дэйв: Крис

Грег: Крис

Chris: Грег

хорошо

Дэйв: Грег

Dave: Greg

не очень хорошо.

Я щелкнул правой кнопкой мыши по таблице и выбрал Индексы/Ключи. Затем я помещаю оба столбца в раздел столбцов и выбираю сделать уникальный. Я думал, что это сделает их уникальными в целом, но индивидуально не уникальными.

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

Есть ли способ убедиться, что вы не вставляете дублируемую копию записи в таблицу без уникальных столбцов?

Я попытался контролировать его с помощью инструкции sql insert, но это не сработало. Это то, что я пробовал.

INSERT INTO [FriendRequests] ([UserId], [FriendUserId]) VALUES ('"+ UserId +', '+ PossibleFriend +'), где не существует (SELECT [UserId], [FriendUserId] ОТ [FriendRequests])

Это почему-то не работает. Благодарим за помощь!

+0

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

+0

Если вы уже задали этот вопрос, попробуйте уточнить свой первоначальный вопрос, как люди спрашивали, а не создавать новый, чтобы загромождать доску. http://stackoverflow.com/questions/707767/sql-unique-record-not-column –

ответ

3

Вы должны создать составной первичный ключ, чтобы предотвратить дублирование строк.

ALTER TABLE FriendRequests 
ADD CONSTRAINT pk_FriendRequests PRIMARY KEY (UserID, FriendUserID) 

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

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

ALTER TABLE FriendRequests 
ADD CONSTRAINT ck_FriendRequests_NoSelfFriends CHECK (UserID <> FriendUserID) 

Вы можете добавить проверочное ограничение в конструкторе щелкнув правой кнопкой мыши в любом месте конструктора таблицы, нажав на кнопку «Проверить ограничения», нажав «добавить», и установка выражение UserID <> FriendUserID

Вы можете посмотреть на this question

+0

Как вы это делаете без кода, потому что я не создал таблицы таким образом? Плохой дизайн для создания таблицы без кода? – user84786

+0

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

+0

Мне жаль, что я прокомментировал, прежде чем вы закончили набирать ответ ... спасибо! – user84786

1

Похоже, вам нужен составной ключ, чтобы сделать оба поля одним ключом.

0

у меня есть идея получше. Создайте новую таблицу. Вызывается FriendRequestRelationships. Следующие столбцы

FriendRelationshipId (PRIMARY KEY) UserID_1 (FOREIGN KEY CONSTRAINT) UserId_2 (FOREIGN KEY CONSTRAINT)

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

Создайте скалярную функцию, которая может возвращать FriendUserId для UserId, позволяет сказать, что это называется fn_GetFriendUserIdForUserId

Теперь вы можете показывать свои отношения, выполнив следующий запрос

ВЫБРАТЬ dbo.fn_GetFriendUserIdForUserId (UserID_1) AS ' Friend1 ', dbo.fn_GetFriendUserIdForUserId (UserId_2) AS' Friend2 ', FROM FriendRelationshipId

Смежные вопросы