2

我有许多表具有相同数量的列和名称,因为它们都是查找表。例如,有 LabelType 和 TaskType 表。LabelType 和 TaskType 表具有 TypeID 和 TypeName 列。它们将在其他表中用作外键,例如带有 shippingLog 表的 LabelType 表和带有 EmployeeTask 表的 TaskType 表。

LabelType Table
TypeID TypeName
1      Fedex
2      UPS
3      USPS

TaskType Table
TypeID TypeName
1      Receiving
2      Pickup
3      Shipping

到目前为止,我有 20 多张桌子,我预计它会继续增加。我对此没有任何问题,但我只是想知道是否有更好或更智能的方式来使用表格。我什至考虑将所有这些表合并为一个查找类型表,并通过从查找表中添加外键来区分它们。查找表可能有标签、任务等数据。然后我只需要一个或两个表来存储所有这些查找数据。

如果您有更好或更智能的数据建模方式,请告诉我。

4

2 回答 2

6

仅仅因为数据具有相似的结构并不意味着它具有相同的含义或相同的约束。将您的查找表分开。这使外键保持独立,因此数据库可以保护自己免于引用错误类型的查找数据。1

我希望关系 DBMS 支持继承,您可以在父表中定义基本结构,并在子表中添加特定的 FK。就目前而言,您需要在 DDL 中忍受一些重复......

注意:“保持查找表分开”规则的一个例外可能是当您的系统需要是动态的(即能够添加新类型的查找数据而无需在数据库中实际创建新的物理表),但看起来并非如此从你的问题来看。


1对于一个大查找表,仅 FK 不会阻止(例如)该ShippingLog表引用该表的行EmployeeTask。通过使用识别关系和迁移 PK,您可以保护自己免受这种情况的影响,但并非没有引入一些冗余并需要一些仔细的约束。简单地做正确的事情并保持查找表分开会更清洁并且可能更高效。

于 2012-08-25T19:01:50.420 回答
1

将您的查找表分开。查找时速度更快,并且您将在添加新查找表的时间之间进行数百万次查找。

很多表不是一个大问题。

于 2012-08-24T23:49:15.820 回答