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

时间:2011-11-20 15:12:37

标签: mysql

我对某个数据库表结构有点犹豫不决,这里是场景:

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

将发票与其中任何一种相关联的最佳方式是什么,还允许添加更多选项?如果它只是产品的发票,则表格设计为:

id, product_id, amount

但这种情况的最佳方式是什么?我想的是:

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

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

2 个答案:

答案 0 :(得分:2)

如果productservice发票之间没有任何差异,只需使用一个包含invoice_type字段的表。


在阅读完整个问题后,您最后列出的内容是正确的。你应该看看的是subclass和超类的例子。

基本上,所有相同的字段都可以分组到一个表中,然后只能将属于特定服务类型的字段分组到自己的表中。而不是有1个或2个表,最终会得到最多3个(超类和2个子类,如果需要),它们将更加规范化。


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

  • 超类:发票

    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
    

答案 1 :(得分:1)

发票可以参考许多产品或服务。

产品可以出现在许多发票中,因为很多人可以购买相同的产品。

但服务怎么样?如果您将其视为与产品相同,那么您需要在两者之间使用多对多表。

我是否讨论是否需要产品和服务的父表。确保模型中两者之间存在真正重要的区别。

就个人而言,我认为两者的单一表格更简单。我一直坚持这个,直到我有明确的理由来区分它们。