我想知道这类问题的最佳做法。
我有两个表:X和Y.表Y有一个到表X的foreign_key所以X有很多Y.当我在表X中获取某些内容时,我需要表Y的相关行。我还需要获取一个X的默认Y值。
我是否应该使用isDefault和约束在表Y上设置boolean列,强制执行一个与X的关系只有一个默认值(fk_to_X和isDefault)
我应该将表X上的foreign_key设置为包含默认Y行ID的表Y(FKDefault_Y_ID)吗?
X有很多Y.我需要使用选项1或选项2在Y值中找到默认值。
这就像偏好值。我有一个有很多选择的选择框。我需要在加载选择框时设置默认选项。所以我为X取每个Y.当保存“表单”时,我获取该X的默认Y行并保存该值。
答案 0 :(得分:2)
我希望我已经理解了这个问题:
我们有一个名为A的父表在表B中有子记录,我们需要在B中有一个单个孩子标记为给定A的默认子项。
据我所知,如果使用Option 1
,在RDBMS中无法使用基数检查约束,则需要使用类似触发器的机制,这是不受欢迎的。
B表中有isDefault
列的另一个反对意见是,自然具有默认值是A的属性。
我将在B的表中使用一个可以为空的外键。
答案 1 :(得分:1)
我不得不说我不明白你的例子,但是如果你有一个默认的Y每X,那我肯定会选择选项2.它以一种自然的方式保证默认的唯一性通过选项1很难实现这一目标。
回应本的评论:
选项2如何强制不能有多个具有相同默认值的Y?
如果要求Y行只能作为一行X的默认值,则选项2仍然可行,因为唯一约束可以放在表X中的“默认Y ID”列中。