单列连接表 - 有意义吗?

Mac*_*ski 5 database-design

我继承了一个数据库架构,它看起来类似于下面的一个:

CREATE TABLE Products (
    ProductID int not null PRIMARY KEY,
    StoreGroupID int not null,
    -- product properties...
)

CREATE TABLE Stores (
    StoreID int not null PRIMARY KEY,
    StoreGroupID int not null,
    -- store properties...
)
Run Code Online (Sandbox Code Playgroud)

这个想法是一个产品和一组商店之间存在 1-* 对应关系(一个产品总是由一组商店携带,一组商店可以携带多种产品)。

然而,当前的数据库没有定义任何类型的“商店组”实体——StoreGroupID而是由业务逻辑代码从序列中分配,完全任意,没有外键约束。

创建一个StoreGroup表是否有意义,即使它可以携带的唯一列是StoreGroupID? 或者有没有另一种方法来模拟这种关系?

pim*_*pim 3

这是一个很好的问题,应用程序层中的业务逻辑渗透到数据库中的情况并不罕见。

我认为这是一个主观的话题,所以这是我的两点意见。

我绝对会创建一张StoreGroup桌子。它允许您定义外键,并维护数据库中的引用完整性,正如它的设计目的一样。StoreGroupId如果应用程序层因任何原因而出现问题,它还可以保证它是唯一的。

它还提供了创建代理键的可能性,这在某些系统中可能是有益的。

是的,它只有一列(目前)。但就像我们现在一样,这可以很容易地改变,当/如果发生这种情况时,你会因为创建一个单独的表而感到高兴。