2016-03-01 5 views
0

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

UserId INT PrimaryKey

OtherUserId INT PrimaryKey

В настоящее время у меня есть следующие данные

UserId OtherUserId

Я не хочу, чтобы повторяющиеся кишечники, такие как

UserId OtherUserId

как я могу осуществить это с помощью SQL Server?

ответ

1

Вы можете сделать это, добавив вычисляемый столбец, а затем уникальный индекс:

alter table friends UserId_least as (case when UserId < OtherUserId then UserId else OtherUserId end); 

alter table friends UserId_greatest as (case when UserId < OtherUserId then OtherUserId else UserId end); 

create unique index unq_friends_least_greatest 
    on friends(UserId_least, UserId_greatest); 
+0

Хотя ваш подход действителен, но я бы хотел избежать повторных данных в наименьших и наибольших столбцах userid ... Я думал больше о триггерах, если нет других более интуитивных способов сделать это ... спасибо для идеи ... – Walid

+0

@Walid. , , Какие повторяющиеся данные? Это вычисляемые столбцы, поэтому они не занимают места (хотя индекс * делает * занимающим пространство). –

+0

Я не знал, что ... Спасибо за информацию ... – Walid

1

Ваш вопрос немного широк. Пожалуйста, имейте в виду, что вы можете иметь только один первичный ключ для таблицы, поскольку он служит идентификацией. Что касается данных, вы можете попытаться использовать автоматическое увеличение, а не значение null, чтобы избежать дублирования ответов.

+0

это составной первичный ключ ... – Walid

+0

, тогда сначала объявите столбцы, которые вы хотите в качестве первичного ключа, как автоматическое приращение, а не null, затем установите обе таблицы как первичный ключ на следующей строке через PRIMARY KEY (имя столбца1, имя столбца2) –

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