我有两张桌子购物和物品
Purchases(purchaseID purchaseDate, itemName,itemCost,itemQty)
Item(itemID,itemName,itemCost,itemQty).... itemID is auto Increment
现在当我在购买表中插入数据时,我希望它在项目表中按字母顺序插入。
例如,对于购买价值(pur001,2014-04-09,caltex,2000,5)
项目表格为(1,caltex,2000,5)
当我在购买表值(pur002,2014-04-09,caltex,4000,10)
中插入第二条记录时,
项目表应如下所示(1,caltex,6000,15)
我该怎么做?
答案 0 :(得分:0)
如果我做对了,你想创建某种统计概览或" soled item counter"在数据库中。这是正确的吗? 因此,用例是:每售出一件商品,购买表中的条目都会更新。
从关系数据库设计的角度来看,这没有意义。创建一个选择所有购买的查询会更容易,按项目ID分组并总结每次购买的项目数。在这种情况下,你没有任何状态"或DB中的计算值。通常,数据库中不需要这样的值。
Nethertheless。如果您仍然需要/需要此功能,则可以使用在INSERT和UPDATE(https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html)上触发的SQL触发器。这些触发器获取插入或更新的值。但是在UPDATE中,戏剧开始了。如果销售商品数量减少,您的策略是什么?如果订单被取消会怎样?你看,也许最好不要在数据库中保存这样的数据:)
答案 1 :(得分:0)
芳族?当插入物发生时发出令人愉快的香味?
实现这一目标的一种方法是创建一个在购买表上执行插入时被触发的TRIGGER。
但您还需要考虑购买表的更新和删除。如果从购买表中删除行,该怎么办?如果itemQty
发生更改或itemName
发生更改,该怎么办?保持item.itemQty
列"同步"可能需要的不仅仅是活动而不是插入。
在我们开始使用CREATE TRIGGER语法之前,您需要仔细考虑预期目标是什么。
如果目标是购买特定商品的总数:
SELECT p.itemName
, SUM(p.itemQty) AS total_qty
FROM purchases p
WHERE p.itemName = 'caltex'
GROUP BY p.itemName
适当的索引
... ON purchases (itemName,itemQty)
可以提供非常有效的查询计划。
有效地将"itemQty"
列添加到"item"
表"中断" Codd对3NF的规则("每个属性都取决于密钥,整个密钥,除了密钥"。"itemQty"
属性(列)"item"
属性(列) 1}} entity(table) NOT 仅依赖于实体的密钥("item"
),...它依赖于其他实体的存在和属性( "purchases"
表中的行。