我有两个表,我们将它们称为Foo
和Bar
,具有一对多的关系,其中Foo
的父级是Bar
。Foo 的主键是一个随序列自动生成的整数。
因为Bar
完全取决于Foo
我将如何设置Bar
给定以下约束的主键:
- Bar 的记录是以编程方式生成的,因此不能依赖用户输入作为标识符。
- 多个进程正在生成 Bar 记录,因此任何涉及 a
Select Max()
来生成 anID
都会呈现竞争条件。
我提出了两种我不满意的可能解决方案:
- 将这些表视为与第三个表的多对多关系,第三个表将它们的记录映射在一起,并让应用程序代码处理插入记录,以便正确创建记录之间的映射。我不喜欢这样,因为它会使数据库设计产生误导,并且应用程序代码中的错误可能会导致无效数据。
- 给 Bar 两个列:
FooID
and 并通过选择 for someFooBarID
生成一个值 ,但如前所述,这会产生竞争条件。FooBarID
max(FooBarID)+1
FooID
我很欣赏任何关于替代表格布局的想法。