数据库设计 - 创建仅包含两个值的表,或使其成为具有这两个值之一的列

cha*_*lor 4 database-design

它更像是一个数据库设计问题,我很好奇当只有两组值时,专业数据库管理员会如何处理 - 以下两个设计方案为例,您可以选择哪一个; 为什么?

情景一

 table INVOICES
 -------------------------------
 id | royalty_fee | royalty_type
 -------------------------------
 1  | 15          | percentage
 2  | 10.00       | fixed
 1  | 25          | percentage
 1  | 25.00       | fixed
Run Code Online (Sandbox Code Playgroud)

要么....

情景二

 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
Run Code Online (Sandbox Code Playgroud)

Hab*_*bib 7

方法2更好.您的开发人员可以使用第二个表ROYALTY_TYPES进行查找,如果您想要添加新类型或编辑/更新ROYALTY_TYPES的标签,您也可以轻松完成.如果您在ROYALTY_TYPES中编辑/修改标签,则只需要在一个地方进行更改,表INVOICES将不受影响
编辑:
我通常会在数据库设计方面寻找三件事:
添加是多么容易:在您的第一个方法中,您如果您没有发票的记录,则无法添加新的版税类型.我的意思是,如果你想添加一个新类型,可以说HalfFixed用于将来的发票.如果没有获得HalfFixed类型的发票,你将无法做到这
一点.更新是否容易让我们说如果你想更新版税类型固定为'FIX'.如果您遵循第一种方法,那么您将需要在多行中更新它.
删除是多么容易现在如果要从"版税类型"中删除类型,那么根据您的第一种方法,您必须在表上运行更新语句并将特定版税类型设置为NULL.