【发布时间】:2013-04-10 03:06:13
【问题描述】:
我有三个表:store、product、storeproduct。
store 和product 表中的内容并不重要,只要知道store 表中有一个storeID,product 表中有一个productID。但是storeproduct 表会跟踪每个store 所具有的不同products。所以storeproduct 表有两列。 storeID 列和 productID 列,都是来自 store 和 product 表的外键。
有没有办法对任何表进行约束或检查,以确保商店的产品必须多于 0 件且少于 50 件。
注意:我不希望 select 语句执行此操作。我只想知道在创建表时是否有办法设置约束或检查。
这样做的目的是,如果已经有 50 个产品(行)具有相同的 storeID,则用户不能将 insert 放入 storeproduct 表中,或者如果删除 storeproduct 表中的 delete row 将导致带有 storeID 的最后一行消失。
storeproduct 表可能如下所示
storeID productID
1 1
1 2
1 3
2 4
2 5
2 6
2 7
3 4
3 2
3 6
3 1
3 8
【问题讨论】:
-
简短的回答是否定的,您必须使用触发器。
-
理解这可能只是一种心理锻炼;即使可以,我也不推荐。当客户/用户/您(我们将使用“您”)希望将一种产品限制为仅在 10 家商店中时会发生什么?或者一家商店有 50 种产品,而供应商错误地向您发送了一个全新的产品?最好有一个按商店/产品的限制查找表,并有“软”验证询问用户“你确定吗?”当他们即将跨越你的任意门槛时。如果商店有 51 件商品;你不希望 #51 “迷路”。
-
感谢迄今为止的投入。是的,我认为这不是一个好主意。我花了很多时间寻找样本/解决方案,似乎上面没有任何内容,这可能意味着一个很好的理由。我只是想确保在我转向其他方法之前这是不可能的。
标签: sql constraints