2

由于缺乏经验,我遇到了设计困境

我有一个名为 Server 的表。在一个专栏中,我需要持有一个外键作为该服务器的“所有者”。但是,所有者可以是供应商或客户。所以有3种可能:

1)为每种类型的所有者放置一列

Server_Id | Server_Address | Vendor_Id | Customer_Id

2)为每种类型的所有者创建一个表

VendorServer_Id | Server_Address

CustomerServer_Id | Server_Address

如您所见,问题是表或列的数量随着所有者类型的数量而增加。什么是常规解决方案?

4

1 回答 1

1

以下是您的方法的缺点
Sol 1.如果是这种情况,如果明天出现新的所有者类型,则需要创建一个新列来维护其 id。同样在所有行中,它可能是 vendor_id 或 customer_id,它们看起来不会被规范化。
Sol 2.需要为将来引入的新所有者类型创建一个新表。这确实很贵,但比Sol 1.
我建议你维护两个表如下

Server_Detail

Server_Id | Server_Address | Owner_Id 

Owner_Detail

Owner_Id | Owner_Id_Type

Owner_IdinServer_Detail与in表中 foreign key。 您可以在代码中定义为今天和. 需要根据值来解释值。为如下 创建一个表也是明智之举Owner_IdOwner_Detail

Owner_TypeenumVendorCustomerOwner_IdOwner_Type
Owner_Type

Owner_Id_Type | Description 

并介绍一个foreign keyServer表。这确保了只Owner_Type允许一个受限的。

于 2012-08-14T13:49:15.387 回答