gpt4 book ai didi

mysql - 数据库设计选择 : Order Belongs To Invoice Or Invoice Belongs To a Order

转载 作者:可可西里 更新时间:2023-11-01 09:01:06 26 4
gpt4 key购买 nike

有一个网站曾经销售实体产品......现在他们想要销售一些完全不同的服务之王......比如信用套餐来向用户帐户收费(购买产品)或购买短信..诸如此类

所以数据库以前是这样的

order : user_id  ,date , total_price 
order_items : order_id , item_id , quantity , price
invoice : order_id , price , settled
Invoice_transactions : invoice_id , amount , date

基本上发票属于订单

现在他们想要销售服务,所以我们必须创建 2 个 orders

product_orders (it used to be orders)
service_orders

现在我必须为发票表选择一个设计

我可以添加另一个字段来指示订单的类型

invoice : order_id , order_type , amount
1 , product , 10000
1 , service , 10000

不知何故感觉不对...或者我可以将发票 ID 添加到订单中

invoice :  order_type , amount , date
product_orders : invoice_id , date , total_price
service_orders : invoice_id , service_id , date , total_price

哪一个(如果有的话)设计似乎更合理?这是产品表: enter image description here

这是服务表的样子:

enter image description here

这里是订单(应该改为产品订单) enter image description here

这是 service_order 的样子 enter image description here

最佳答案

我认为产品订单和服务订单的共同点多于不同点。在更大的商业和金融生态系统中,他们可能共享相同的角色/职能。所以我的第一直觉是为两种订单使用一个表。

一对一表格

另一种方法是简单地拥有一个 order_ 表,其中有一列指示哪种类型的订单,名称类似于 order_type_,其中包含诸如 sales 的值或 产品

将所有与产品相关的列移动到单独的子表 product_info_。将所有与销售相关的列移至单独的子表 service_info_。我会让 order_ 表成为两者的父表,尽管从技术上讲我们有一对一的关系。对于任何给定的 order_ 行,我们只有一个 product_info_ 行或只有一个 service_info_ 行。

这可能会最大限度地减少数据库中的数据重复和应用中的编码。当您需要产品或服务详细信息时,您的应用代码使用标志字段 order_type_ 来适本地查询一个或另一个子表。

发票表链接到订单表。我假设两种类型的订单的发票工作方式几乎相同。

订单中的所有字段

另一种方法是简单地将所有产品服务字段包含在order_ 表中。只需忽略服务订单的产品相关字段,并忽略产品订单的服务相关字段。这不是最优雅的,但如果您的字段相对较少,并且可能在列名称前加上 prod_serv_,这可能是可行的。我当然不止一次这样做过。

关于mysql - 数据库设计选择 : Order Belongs To Invoice Or Invoice Belongs To a Order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42044031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com