Ограничения таблицы MS SQL Bridge - PullRequest
0 голосов
/ 11 марта 2010

Привет -

У меня есть таблица статей и таблица категорий.

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

  • BridgeID int (PK)

  • ArticleID int

  • CategoryID int

Теперь я хочу создать ограничения / отношения, чтобы комбинации ArticleID-CategoryID были уникальными И чтобы идентификаторы существовали в соответствующих таблицах первичного ключа (Статьи и Категории).

Я пытался использовать VS2008 Server Explorer и Enterprise Manager (SQL-2005) для создания отношений FK, но результаты всегда предотвращают дублирование ArticleIDs в таблице мостов, даже если CategoryID отличается.

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

Может кто-нибудь сказать мне, пожалуйста, как это должно быть сделано?

С благодарностью!

Ответы [ 3 ]

1 голос
/ 11 марта 2010

Не использовать столбец BridgeId.

Создайте составной первичный ключ (он же составной ключ ) из ваших ArticleId и CateogryId, который обеспечит уникальность каждой комбинации.

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

0 голосов
/ 11 марта 2010

Расширяя решение HLGEM, вы получите что-то вроде:

Create Table ArticleCategories
(
    Id int not null Primary Key Clustered
    , ArticleId int not null
    , CategoryId int not null
    , Constraint UK_ArticleCategories_Unique ( ArticleId, CategoryId )
    , Constraint FK_ArticleCategories_Articles
        Foreign Key ( ArticleId )
        References Articles( Id )
    , Constraint FK_ArticleCategories_Categories
        Foreign Key ( CategoryId )
        References Categories( Id )
)
0 голосов
/ 11 марта 2010

Хорошо, сначала вы делаете уникальный индекс для ArticleID, CategoryID.

Затем вы устанавливаете ограничение внешнего ключа для articleID, связывая его с таблицей Article. и затем сделайте то же самое для CategoryID и таблицы Catgory.

Ваше описание звучит так, как будто вы создаете PK на столе Bridge и FK на другой таблице, поэтому это не сработает.

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