4

这更像是一个数据库设计问题,并且很好奇当只有两组值时专业数据库管理员将如何处理 - 以下面两个设计场景为例,您会选择哪个;为什么?

情景一

 table INVOICES
 -------------------------------
 id | royalty_fee | royalty_type
 -------------------------------
 1  | 15          | percentage
 2  | 10.00       | fixed
 1  | 25          | percentage
 1  | 25.00       | fixed

或者....

方案二

 table INVOICES
 ----------------------------------
 id | royalty_fee | royalty_type_id
 ----------------------------------
 1  | 15          | 1
 2  | 10.00       | 2
 1  | 25          | 1
 1  | 25.00       | 2


 table ROYALTY_TYPES
 -------------------------------
 id | label
 -------------------------------
 1  | percentage
 2  | fixed
4

3 回答 3

7

方法2更好。您的开发人员可以使用第二个表 ROYALTY_TYPES 进行查找,如果您想添加新类型或编辑/更新 ROYALTY_TYPES 的标签,您也可以轻松完成。如果您在 ROYALTY_TYPES 中编辑/修改标签,则只需要在一个地方进行更改,并且表 INVOICES 将不受影响
编辑:
我通常会寻找与数据库设计相关的三件事:
添加的难易程度:在您的第一种方法中,您如果您碰巧没有发票记录,将无法添加新的版税类型。我的意思是,如果您想添加一种新类型,可以说 HalfFixed 用于未来的发票。如果没有 HalfFixed 类型的发票,您将无法执行此操作
更新有多容易假设您想将固定版税类型更新为“修复”。如果您遵循第一种方法,那么您将需要在多行中更新它。
删除是多么容易现在如果您想从版税类型中删除一个类型,那么根据您的第一种方法,您将必须在表上运行更新语句并将特定的版税类型设置为 NULL。

于 2012-04-19T17:07:28.097 回答
2

我会使用后者,毫无疑问。

  1. 你能绝对确定永远不会有另一种版税类型吗?你不能。
  2. 您可以通过外键关系验证Royalty_type_id 列...对于royalty_type 不是这样...您必须对硬编码的文本值使用检查约束。
  3. 使用版税_types 表,您可以根据需要向版税类型实体本身添加新功能。
于 2012-04-19T17:11:35.540 回答
1

在事务数据库上,2 更好。1 可用于数据仓库系统。

于 2012-04-19T17:11:34.497 回答