【发布时间】:2018-07-11 05:20:32
【问题描述】:
我想不出办法来消除这种潜在的不一致:
考虑这 4 个实体:
CUSTOMERS >---------------- LOCATIONS
id id
name name
loc_id
|
| |
| |
| |
/\ /\
ORDERS >------------------ PRODUCTS
c_id id
p_id name
loc_id
每个客户都有一个位置(id:“3”,名称:“US”)
每个客户订购许多产品,每个产品可以被许多客户购买(这些交易存储在 ORDERS 表中)
每个产品只提供给具有相同位置的客户 (“美国”客户可以使用“美国”产品)
问题:
我想让 product 仅对“美国”的 customers 可用,因此我插入了一个 loc_id 为“3”的 product(美国)。
当我插入一个 loc_id 为“2”(欧盟)的 customer 并为同一 product 创建一个 order 时,问题就出现了。我最终在一个 LOCATION 找到了一个客户,他订购了在另一个 LOCATION产品 /强>。有什么办法可以避免吗?
【问题讨论】:
-
听起来你需要一个触发器。
-
查看我对How to apply complex constraints to a database table in MySQL? 的回复。但是,您的案例可能要求客户的声誉级别必须大于或等于产品的声誉级别,而不仅仅是等于。这需要一个触发器。
-
@reaanb 我只需要它们匹配。我将不得不花一些时间来分析您的链接,但据我所见,我可以将 replvl_id 外键添加到我的 ORDERS 表中,该表引用 CUSTOMERS 和 PRODUCTS,并使用复合键强制执行我的要求。我在正确的轨道上吗?
-
@Danbisso 是的,但是有两个复合键。
-
声誉相等的情况是一个常见问题。谷歌我的 cmets 关于谷歌搜索你问题的许多版本。你在评论中说这就是你想要的。那不是你的问题。请编辑您的问题以实际提出您要提出的问题。 (评论不是为了澄清。)
标签: mysql sql database database-design database-normalization