mysql - 数据库表设计问题(简单)

标签 mysql

我对某个数据库表结构有点优柔寡断,场景如下:

我有一个“发票”表,发票可以用于“产品”或“服务”(产品在表中,服务在单独的表中)。

将发票链接到其中任何一个的最佳方式是什么,同时还允许添加更多选项?如果它只是一个产品的发票,表格设计将是:

id, product_id, amount

但是这种情况下最好的方法是什么?我在想类似的事情:

id, source_id, invoice_type (product or service), amount

但我认为这可能不是一个好主意。

最佳答案

如果 productservice 发票之间没有任何区别,只需使用一个带有 invoice_type 字段的表。


看完你的整个问题后,你在最后列出的是正确的。您应该查看的是 subclass 的示例和父类(super class)。

基本上,您所有相同的字段都可以分组到一个表中,然后仅属于特定类型服务的字段可以分组到它自己的表中。您最终不会拥有 1 或 2 个表,而是最多有 3 个(需要时有一个父类(super class)和 2 个子类),并且它们会更加规范化。


给定你的例子(注意:这只是一个例子):

  • 父类(super class):发票

    id, invoice_type (product or service), amount, invoice_dt, customer_paid
    
  • 子类:产品

    invoice_id, msrp, cost, purchase_dt
    
  • 子类:服务

    invoice_id, duration, extraneous_cost, start_dt, end_dt
    

关于mysql - 数据库表设计问题(简单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8202441/

相关文章:

mysql - 将最后一行标记为 MySQL 中的列

c# - 对象不能从 DBNull 转换为其他类型? C#

mysql - 根据条件执行UPDATE

php - 多个唯一值 MYSQL

mysql - 尝试构建复杂的嵌套连接

mysql - SQL - 根据查询结果从一个表中获取计数

php - 在 Wordpress 中运行 MySQL 查询会导致 HTML 标记消失?

mysql - 更好的排序选项,支持 MYSQL 中的所有语言

php - 为什么我的提交默认为 GET?我清楚地将操作标记为 "post",但我不确定为什么

mysql - PhPMyAdmin 错误#1064;语法错误