我有四个表(A、B、C、D),其中 A 是与 B 和 C 的一对多关系的父级。C 和 D 是与表 D 的一对多关系的父级。从概念上讲,这些的主键表可以是:
- 答:援助
- B: Aid, bnum (外键指向 A)
- C:aid,cnum(外键指向A)
- D:Aid、bnum、cnum(带有 B 和 C 的外键)
其中“num”列根据关系中的每个父 id 而不是每条记录自动递增。我在以前的应用程序中使用了这种方法,这不是问题,因为 B 和 C 记录的创建是通过顺序过程通过“select max()”查询生成新的“num”值来完成的。我从未对这种方法感到真正满意,但它完成了工作。
对于我现在正在处理的特定情况,表 A 和 B 中的记录由用户输入,因此自动生成 id 不是问题。对于表 C 和 D,这些表中的记录是由多个并发批处理生成的,因此需要以某种方式生成它们的标识符。我列出的先前方法不适用于竞争条件。
请注意,这是针对 Oracle 数据库的,因此我将使用序列而不是自动递增列。
鉴于上述约束,您将如何设计表来表示 A、B、C 和 D,以便正确执行实体之间的关系并且不需要应用程序代码生成任何标识符?