一对多关系中的标识符

Mar*_*ddy 1 database oracle ddl database-design

我有两个表,我们会打电话给他们Foo,并Bar与一对多的关系,其中Foo是的父Bar.Foo的主键是使用序列自动生成的整数.

由于Bar完全取决于Foo如何设置Bar给定以下约束的主键:

  • 以编程方式生成Bar的记录,因此不能依赖用户输入标识符.
  • 多个进程正在生成Bar记录,因此任何涉及 Select Max()生成a的内容ID都会出现竞争条件.

我想出了两个我不满意的可能解决方案:

  • 将表视为与第三个表的多对多关系,将第三个表映射到一起并让应用程序代码处理插入记录,以便正确创建记录之间的映射.我不喜欢这样,因为它使数据库设计误导,应用程序代码中的错误可能导致无效数据.
  • 给Bar两个colunms:FooID并 通过选择for some 来 FooBarID生成一个值 ,但如前所述,这会创建一个竞争条件.FooBarIDmax(FooBarID)+1FooID

我很欣赏任何替代表格布局的想法.

小智 5

为Bar提供与Foo相同的自动主键.将外键FooID列添加到Bar.

除非我遗漏了某些东西,否则它似乎没有理由不起作用.