我有两个表,我们会打电话给他们Foo
,并Bar
与一对多的关系,其中Foo
是的父Bar
.Foo的主键是使用序列自动生成的整数.
由于Bar
完全取决于Foo
如何设置Bar
给定以下约束的主键:
以编程方式生成Bar的记录,因此不能依赖用户输入标识符.
多个进程正在生成Bar记录,因此任何涉及
Select Max()
生成a的内容ID
都会出现竞争条件.
我想出了两个我不满意的可能解决方案:
将表视为与第三个表的多对多关系,将第三个表映射到一起并让应用程序代码处理插入记录,以便正确创建记录之间的映射.我不喜欢这样,因为它使数据库设计误导,应用程序代码中的错误可能导致无效数据.
给Bar两个colunms:FooID
并
通过选择for some 来
FooBarID
生成一个值
,但如前所述,这会创建一个竞争条件.FooBarID
max(FooBarID)+1
FooID
我很欣赏任何替代表格布局的想法.
为Bar提供与Foo相同的自动主键.将外键FooID列添加到Bar.
除非我遗漏了某些东西,否则它似乎没有理由不起作用.