mysql - 必须插入一条记录,然后更新同一记录保证 1 :1 relationship design?

标签 mysql sql database-design database-performance relationships

假设一个 Order 有许多 Line 项目,我们在订单中存储一个订单的总成本(基于订单行的价格总和)表。

--------------
orders
--------------
id
ref
total_cost
--------------

--------------
lines
--------------
id
order_id
price
--------------

在一个简单的应用程序中,订单和行是在结帐过程的同一步骤中创建的。所以这意味着

INSERT INTO orders .... 

-- Get ID of inserted order record
INSERT into lines VALUES(null, order_id, ...), ...

我们在创建订单记录后获取订单 ID 的位置。

我遇到的问题是试图找到存储订单总成本 的最佳方式。我不想必须

  1. 创建订单
  2. 在订单上创建行
  3. 根据行计算订单成本,然后更新订单表中在 1. 中创建的记录

这意味着初学者订单上的可空 total_cost 字段...

到目前为止,我的解决方案是使用一个与 orders 表具有 1:1 关系的 order_totals 表。但我认为这是多余的。理想情况下,由于计算总成本(订单行)所需的一切都在数据库中,我会在每次需要时计算出该值,但这是非常昂贵的。

你有什么想法?

最佳答案

我认为最好不要有订单总计列或表格。

只需在需要显示它们时通过汇总行记录来计算订单总计。想象一下,如果行记录发生变化,那么您将不得不不断地维护另一个列或表来更新订单的总价。

关于mysql - 必须插入一条记录,然后更新同一记录保证 1 :1 relationship design?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11252783/

相关文章:

php - 抓取查询,放入 $_Session

php - 电话号码改为2147483647?如何表示电话号码?

mysql - 从不同的表中检索和格式化结果

mysql - 从单列中计数并将其分成 2 列

mysql - 如果特定列同时具有两个值,如何从数据库中获取 ID

database - 数据库中的数据集是否始终以一种形式或另一种形式标准化

database - 在数据库列中存储分隔列表真的那么糟糕吗?

sql - 固定时间表DB设计

c# - 如何在c#(mysql)中使用select

php - 在mysql中写多个where过滤