我继承了一个数据库架构,它看起来类似于下面的一个:
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
? 或者有没有另一种方法来模拟这种关系?
这是一个很好的问题,应用程序层中的业务逻辑渗透到数据库中的情况并不罕见。
我认为这是一个主观的话题,所以这是我的两点意见。
我绝对会创建一张StoreGroup
桌子。它允许您定义外键,并维护数据库中的引用完整性,正如它的设计目的一样。StoreGroupId
如果应用程序层因任何原因而出现问题,它还可以保证它是唯一的。
它还提供了创建代理键的可能性,这在某些系统中可能是有益的。
是的,它只有一列(目前)。但就像我们现在一样,这可以很容易地改变,当/如果发生这种情况时,你会因为创建一个单独的表而感到高兴。