как один столбец многоколоночного первичного ключа можно использовать в качестве внешнего ключа - PullRequest
0 голосов
/ 21 января 2012

У меня есть таблица отображения как таковая:

english.Phrases (PhraseId int, WordId int, Order int)
Primary Key Clustered (PhraseId, WordId)

И еще одна таблица:

english.RelatedPhrases (RelatedPhraseId int, PhraseId int)

Как настроить отношение внешнего ключа между двумя таблицами, используя PhraseId?

Отредактировано, чтобы ответить на комментарий к какой базе данных: Я использую Microsoft SQL 2008, поэтому я изменил тег.

Отображение должно быть следующим; рассмотрим следующие фразы:

1. "turn out to be", phraseId of 1
2. "grow to be", phraseId of 2
3. "turn into", phraseId of 3
4. "come to be", phraseId of 4

Каждое слово имеет запись в следующей таблице:

english.Words (WordId int, Word varchar(20))

В таблице english.Phrases для "turn out to" есть следующие записи:

(1, @word1Id, 1) @word1Id = id of 'turn'
(1, @word2Id, 2) @word2Id = id of 'out'
(1, @word3Id, 3) @word3Id = id of 'to'
(1, @word4Id, 4) @word4Id = id of 'be'

Теперь, что я хочу от таблицы english.RelatedPhrases, это иметь PhraseId, равный 1, который представляет «оказывается», чтобы относиться к другим фразам, скажем, в данном случае, 2, 3 и 4; все 4 записи в RelatedPhrases, имеющие RelatedPhraseId = 1.

Ответы [ 2 ]

1 голос
/ 22 января 2012

Если таблица Phrase может иметь несколько строк с одним и тем же PhraseID, вы должны ввести новую таблицу. Например:

create table PhraseIds (
    PhraseId int primary key)

create table Phrase (
    PhraseId int foreign key references PhraseIds, 
    WordId int, 
    [Order] int,
    primary key (PhraseID, WordId))

create table RelatedPhrases (
    RelatedPhraseId int primary key, 
    PhraseId int foreign key references PhraseIds(PhraseID))
0 голосов
/ 22 января 2012

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

...