繁体   English   中英

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

[英]Database table design issue (simple)

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

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

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

id, product_id, amount

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

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

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

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


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

基本上,您可以将所有相同的字段分组到一个表中,然后可以将仅与特定服务类型相关的字段分组到自己的表中。 您最终将获得最多3个(超级类和需要的2个子类),而不是拥有1个或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 

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

一个产品可以出现在许多发票上,因为很多人可以购买同一产品。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM