如何将多列主键的一列用作外键

时间:2012-01-21 19:59:11

标签: sql-server-2008 foreign-keys

我有一个映射表:

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

另一张桌子:

english.RelatedPhrases (RelatedPhraseId int, PhraseId int)

如何使用PhraseId设置2个表之间的外键关系?

编辑回答关于哪个数据库的评论: 我正在使用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表格中包含以下条目:“结果是”:

(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; RelatedPhrases中有4个条目,其中RelatedPhraseId = 1。

2 个答案:

答案 0 :(得分:1)

如果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))

答案 1 :(得分:0)

您可以检查触发器中是否存在记录.. 只是不要忘记表现。

相关问题