首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子产品类型的SQL表模式

子产品类型的SQL表模式
EN

Stack Overflow用户
提问于 2015-03-16 10:49:56
回答 1查看 538关注 0票数 2

我有一个传统的带有供应商==>产品关系的SQL模式。

然而,我也有几个“超级”产品类型,需要它们自己的数据/表。我想出了以下模式--记住我使用的是实体框架,所以导航对我也很重要。

唯一的复制是在小众产品表上,其中添加了SupplierID以维护与NicheSupplier的关系。

NicheSupplier是必需的,因为有一些额外的信息,只有利基供应商基于有一个或更多的利基产品。

如果需要的话,我可以直接和供应商建立关系(对EF导航有好处)。

我已经确定,为了确保完整性,小众表也需要几个触发器。

我不是SQL专家--事实上,还远不是这样,所以我希望能就这类场景是否有更好的模式,或者有什么天生的坏处,提出意见和建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-16 11:25:40

您的模式是接近的,但并不完全在那里,您确实需要从dbo.NicheProduct.SupplierIDdbo.NicheSupplier.SupplierID的链接,但也需要添加从dbo.Product到dbo.NicheProduct的链接,以确保NicheSupplier中的供应商和产品id的组合是一个有效的组合。要做到这一点,您需要向dbo.Prodcut on (ProductID,SupplierID)添加一个唯一的约束,这允许NicheProduct上的外键确保组合是有效的。这意味着不需要触发器来保持完整性。因此,您的SQL应该类似于:

代码语言:javascript
复制
CREATE TABLE dbo.Supplier
(
        ID INT IDENTITY,
    CONSTRAINT PK_Supplier__ID PRIMARY KEY (ID)
);

CREATE TABLE dbo.NicheSupplier
(
        SupplierID INT NOT NULL,
    CONSTRAINT PK_NicheSupplier__SupplierID PRIMARY KEY (SupplierID),
    CONSTRAINT FK_NicheSupplier__SupplierID FOREIGN KEY (SupplierID) 
        REFERENCES dbo.Supplier (ID)
);
CREATE TABLE dbo.Product 
(
        ID INT IDENTITY,
        SupplierID INT NOT NULL,
    CONSTRAINT PK_Product__ID PRIMARY KEY (ID),
    CONSTRAINT FK_Product__SupplierID FOREIGN KEY (SupplierID) 
        REFERENCES dbo.Supplier (ID),
    CONSTRAINT UQ_Product__ID_SupplierID UNIQUE (ID, SupplierID)
);

CREATE TABLE dbo.NicheProduct
(
        ProductID INT NOT NULL,
        SupplierID INT NOT NULL,
    CONSTRAINT PK_NicheProduct__ProductID PRIMARY KEY (ProductID),
    CONSTRAINT FK_NicheProduct__ProductID_SupplierID FOREIGN KEY (ProductID, SupplierID) 
        REFERENCES dbo.Product (ID, SupplierID),
    CONSTRAINT FK_NicheProduct__SupplierID FOREIGN KEY (SupplierID) 
        REFERENCES dbo.NicheSupplier (SupplierID)
);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29074984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档