- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有一个网站曾经销售实体产品......现在他们想要销售一些完全不同的服务之王......比如信用套餐来向用户帐户收费(购买产品)或购买短信..诸如此类
所以数据库以前是这样的
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
这是服务表的样子:
最佳答案
我认为产品订单和服务订单的共同点多于不同点。在更大的商业和金融生态系统中,他们可能共享相同的角色/职能。所以我的第一直觉是为两种订单使用一个表。
另一种方法是简单地拥有一个 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/
我是一名优秀的程序员,十分优秀!