Database design 数据库设计-创建一个只有两个值的表,或者将其设置为包含这两个值之一的列

Database design 数据库设计-创建一个只有两个值的表,或者将其设置为包含这两个值之一的列,database-design,Database Design,这更多的是一个数据库设计问题,我很好奇,当只有两组值时,专业的数据库管理员会如何处理——下面举一个例子,说明两种设计方案,您会选择哪种方案;为什么 情景一 或者 情景二 方法2更好。您的开发人员可以使用第二个表格版税类型进行查找,如果您想添加新类型或编辑/更新版税类型的标签,您也可以轻松地进行查找。 如果在版税类型中编辑/修改标签,则只需在一个位置进行更改,并且表格发票将不受影响 编辑: 关于数据库设计,我通常会考虑三件事: 添加有多容易:在第一种方法中,如果您没有发票记录,您将无法添加新的版税

这更多的是一个数据库设计问题,我很好奇,当只有两组值时,专业的数据库管理员会如何处理——下面举一个例子,说明两种设计方案,您会选择哪种方案;为什么

情景一

或者

情景二


方法2更好。您的开发人员可以使用第二个表格版税类型进行查找,如果您想添加新类型或编辑/更新版税类型的标签,您也可以轻松地进行查找。 如果在版税类型中编辑/修改标签,则只需在一个位置进行更改,并且表格发票将不受影响
编辑:
关于数据库设计,我通常会考虑三件事:
添加有多容易:在第一种方法中,如果您没有发票记录,您将无法添加新的版税类型。我的意思是,如果你想添加一个新的类型,比如说半固定的未来发票。如果没有半固定类型的发票,您将无法执行此操作
更新有多容易假设您想将版税类型更新为“FIX”。如果您遵循第一种方法,则需要在多行中更新它。

现在删除有多容易如果要从版税类型中删除类型,那么根据第一种方法,您必须在表上运行update语句,并将特定版税类型设置为NULL

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

我会使用后者,毫无疑问

  • 你能绝对肯定不会再有另一种版税类型吗?不,你不能
  • 您可以通过外键关系验证royalty\u type\u id列……但对于royalty\u type,情况并非如此……您必须对硬编码的文本值使用检查约束
  • 使用“版税类型”表,您可以根据需要向版税类型实体本身添加新功能

  • 同意。此外,您还可以利用外键约束确保插入的值符合可用的值集。感谢您花时间解释,@Habib.OSU。
     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