我有一个数据库有三个表
消息-PK=消息id
草稿-PK=草稿
历史记录-FK=RelatedItemId
历史表有一个外键[RelatedItemId]
,它映射到Messages
和Drafts
中的两个主键之一。
这段关系有名字吗?
只是设计不好吗?
有没有更好的方法来设计这种关系?
下面是这个问题的CREATE TABLE语句:
CREATE TABLE [dbo].[History](
[HistoryId] [uniqueidentifier] NOT NULL,
[RelatedItemId] [uniqueidentifier] NULL,
CONSTRAINT [PK_History] PRIMARY KEY CLUSTERED ( [HistoryId] ASC )
)
CREATE TABLE [dbo].[Messages](
[MessageId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_Messages] PRIMARY KEY CLUSTERED ( [MessageId] ASC )
)
CREATE TABLE [dbo].[Drafts](
[DraftId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_Drafts] PRIMARY KEY CLUSTERED ( [DraftId] ASC )
)
最佳答案
我发现的最佳实践是创建一个函数,它返回传入的值是否存在于您的消息和草稿PK列中。然后,可以在调用该函数的历史上添加一个约束,如果它通过(即存在),则只插入约束。
添加未分析的示例代码:
创建函数在那里是相关的(
在@value uniqueidentifier中)
返回TINYINT
开始
如果(从草稿中选择count(DraftId),其中DraftId=@value+从消息中选择count(MessageId),其中MessageId=@value)>0,则
返回1;
其他
返回0;
结束IF;
结束;
更改表历史记录添加约束
CKySyristyOnt存在检查(IsRelabyTyWin(ReleDistMeID)=1)
希望它能跑起来帮我