У меня есть четыре таблицы (A, B, C, D), где A является родителем отношений один-ко-многим с B и C. C и D являются родителями отношения один-ко-многим с таблицей D. Концептуально, основной ключи этих таблиц могут быть:
- A: Помощь
- B: Помощь, bnum (с внешним ключом к A)
- C: Помощь, cnum (с внешним ключом к A)
- D: Aid, bnum, cnum (с внешними ключами к B и C)
Где столбцы 'num' автоматически увеличиваются на основе каждого родительского идентификатора в отношении, а не на каждой записи. Я использовал этот подход в предыдущем приложении, и это не было проблемой, поскольку создание записей B и C выполнялось последовательным процессом путем генерации нового значения 'num' с помощью запроса 'select max ()'. Я никогда не был действительно удовлетворен подходом, но это сделало работу.
Для конкретного случая, над которым я сейчас работаю, записи в таблицах A и B вводятся пользователями, поэтому автоматическая генерация идентификаторов не является проблемой. В случае таблиц C и D записи в этих таблицах генерируются несколькими параллельными пакетными процессами, поэтому их идентификаторы должны быть сгенерированы каким-либо образом. Предыдущий метод, который я перечислил, не работает в зависимости от состояния гонки.
Обратите внимание, что это для базы данных Oracle, поэтому я буду использовать последовательности, а не столбцы с автоинкрементом.
Учитывая приведенные выше ограничения, как бы вы разработали таблицы для представления A, B, C и D так, чтобы отношения между сущностями были должным образом применены И для создания идентификаторов не требовался код приложения?