SQL Server (2008) Создание таблиц ссылок с уникальными строками - PullRequest
0 голосов
/ 02 февраля 2009

У меня проблемы со связью с SQL Server Managemen Studio 2008! Я хочу создать таблицу ссылок, которая свяжет событие со многими аудиториями (EventAudience).

Пример данных, которые могут содержаться:

EventId | AudienceId

  4              1
  5              1
  4              2

Однако я не хочу этого:

EventId | AudienceId

  4              1
  4              1

Я смотрю на отношения и ограничения ... но пока радости нет!

В качестве скрытой второй части вопроса я хотел бы настроить таблицу Audience таким образом, чтобы, если строка была удалена из аудитории, она очищала таблицу ссылок EventAudience каскадным способом.

Как всегда, ЛЮБАЯ помощь / совет приветствуются!

Спасибо Пит

Ответы [ 5 ]

4 голосов
/ 02 февраля 2009

Вы должны иметь возможность создать составное уникальное ограничение как для EventId, так и для AudienceID.

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

4 голосов
/ 02 февраля 2009

Просто используйте:

CREATE UNIQUE INDEX UQ_EventAudience ON dbo.EventAudience(EventID, AudienceID);
0 голосов
/ 02 августа 2010

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

0 голосов
/ 13 июля 2010

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

CONSTRAINT [PK_EventIdAudienceId] PRIMARY KEY CLUSTERED 
( [EventId] ASC, [AudienceId] ASC )
0 голосов
/ 02 февраля 2009

Альтернативное предложение: используйте триггеры.

псевдокод ...

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

Та же идея для удаления

снова псевдокод

Создать триггер при удалении в таблице аудитории ...
удалить элемент из таблицы аудиторий
найдите и удалите ссылки в таблице ссылок.

Извините, это псевдокод, у меня нет сервера SQL под рукой, чтобы посмотреть синтаксис, поэтому я не хотел вводить в заблуждение.

...