相关疑难解决方法(0)

设计模式 - 许多父表之一

我经常在数据库中遇到一种情况,其中给定的表可以 FK 到许多不同的父表中的一个。我已经看到了这个问题的两种解决方案,但都不是个人满意的。我很好奇你在那里看到了什么其他模式?有没有更好的方法来做到这一点?

一个人为的例子
假设我的系统有Alerts. 可以接收各种对象的警报——客户、新闻和产品。一个给定的警报可以只针对一个项目。无论出于何种原因,客户、文章和产品都在快速移动(或本地化),因此在创建警报时无法将必要的文本/数据拉入警报。鉴于此设置,我看到了两种解决方案。

注意:下面的 DDL 是针对 SQL Server 的,但我的问题应该适用于任何 DBMS。

解决方案 1 -- 多个可空 FKey

在此解决方案中,链接到多个表之一的表具有多个 FK 列(为简洁起见,下面的 DDL 不显示 FK 创建)。 好处- 在这个解决方案中,我有外键很好。FK 的空优化使得添加准确数据变得方便且相对容易。THE BAD Querying 不是很好,因为它需要N LEFT JOINS 或N UNION 语句来获取关联数据。在 SQL Server 中,特别是 LEFT JOINS 阻止创建索引视图。

CREATE TABLE Product (
    ProductID    int identity(1,1) not null,
    CreateUTC    datetime2(7) not null,
     Name        varchar(100) not null
    CONSTRAINT   PK_Product Primary Key CLUSTERED (ProductID)
)
CREATE TABLE Customer (
    CustomerID  int identity(1,1) …
Run Code Online (Sandbox Code Playgroud)

database-design

13
推荐指数
1
解决办法
2928
查看次数

标签 统计

database-design ×1