取决于类别的外键约束

Foreign-Key constraint depending on category

我在 table "Bill" 和 table 之间有一个 m:n 连接 "GeneralArticles"、"CalculatedArticles" 和 "AdditionalRecords".

这些 table 是直截了当的。每个都有自己的 ID(我们称它们为 B_ID,其他的为 GA_ID、CA_ID 和 AR_ID)和一些附加字段。 问题是如何在Bill和这三个保证引用完整性的table之间建立一个m:n-连接-table?

我的第一个想法是简单地创建:

CREATE TABLE Bill_Articles(
[B_ID] [int] NOT NULL FOREIGN KEY REFERENCES Bill (B_ID) ,
[A_ID] [int] NOT NULL ,
Category [int] NOT NULL
CONSTRAINT [PK_Bill_Articles] PRIMARY KEY CLUSTERED 
            (
            [B_ID] ASC,
            [A_ID] ASC,
            [Category] ASC
            ))

我已经为类别设置了一个 table,所以理论上我可以将 1 用于一般文章,等等,你明白了。 然而问题是如何根据类别引用另一个 table?

另一种解决方案是创建一个包含此类别 ID 和记录 ID 的视图:

Create View Articles
AS
Select 1 Category,
        GA_ID A_ID FROM GeneralArticles
UNION 
SELECT 2 Category,
       CA_ID A_ID FROM CalculatedArticles
UNION 
SELECT 3 Category,
        AR_ID  A_ID  
        FROM AdditionalRecords

不幸的是,在设置 Bill_Articles table 时出现错误:

Foreign key 'FK__Bill_Ar_A_ID__7526B52E' references object 'Articles' which is not a user table.

不知何故,我无法使用这种视图来提供唯一键。

有谁知道此类问题的正确解决方案吗? 谢谢

通常由于这些原因,您不会创建一个 table 带有类别的列,因为您没有合适的外键。

您应该创建几个 table。

一个 table 到 link 个法案和一般条款。第二个 table 到 link 个 Bills 和 CalculatedArticles。第三个 table 到 link 个账单和附加记录。

对于第一个 link 它可能看起来像这样(我没有检查语法):

CREATE TABLE BillsGeneralArticlesAssosiations(
[B_ID] [int] NOT NULL FOREIGN KEY REFERENCES Bill (B_ID) ,
[GA_ID] [int] NOT NULL FOREIGN KEY REFERENCES GeneralArticles (GA_ID)
CONSTRAINT [PK_BillsGeneralArticlesAssosiations] PRIMARY KEY CLUSTERED 
(
    [B_ID] ASC,
    [GA_ID] ASC
))

有时我将 IDENTITYID 添加到此 table 作为主键。特别是如果此 linking table.

中还有其他字段