У меня есть две таблицы, мы будем называть их Foo
и Bar
, с отношением один ко многим, где Foo
является родителем Bar
. Первичным ключом Foo является целое число, автоматически генерируемое с помощью последовательности.Идентификаторы в отношениях друг к другу
Поскольку Bar
полностью зависит от Foo
как бы я настроить первичный ключ Bar
с учетом следующих ограничений:
- записи для бара программно генерируется так, вводимые пользователем, не может быть полагаться для идентификатора ,
- Множественные процессы генерации Bar записи, так что ничего вовлекая
Select Max()
, чтобы генерироватьID
бы представить состояние гонки.
Я пришел с двумя возможными решениями, которые я не доволен:
- Лечить таблицы, как будто они являются многие ко многим отношения с третьей таблицы, которая отображает их записи вместе и имеют приложение , в котором записаны записи кода, поэтому , что отображение между записями создано правильно. Мне не нравится , так как это делает дизайн базы данных вводящим в заблуждение и ошибки в приложении код может привести к недействительным данным.
- Дайте Bar два colunms:
FooID
иFooBarID
и генерировать значение дляFooBarID
, выбравmax(FooBarID)+1
для некоторогоFooID
, но как уже отмечалось ранее это создает условие гонки.
Я ценю любые идеи для альтернативного макета таблицы.
Вы заметили, что ОП отметил этот вопрос «оракул»? IDENTITY не поддерживается Oracle, а только SEQUENCE. – 2008-12-10 18:35:37
@ [Билл Карвин]: нет, пропустил это! последовательности в oracle могут использоваться для реализации идентификаторов автоматического инкремента, хотя – 2008-12-10 18:41:23