CREATE TABLE A_TO_B
(
a_id NUMBER NOT NULL REFERENCES A (a_id),
b_id NUMBER NOT NULL REFERENCES B (b_id),
PRIMARY KEY (a_id, b_id),
...
) ;
Для ORM весьма обычно требовать (или, в более понятных ORM, надеяться на) целочисленный столбец с именем "id" в дополнение к любым другим имеющимся у вас ключам. Кроме того, в этом нет необходимости. Подобное число идентификатора делает таблицу шире (что обычно незначительно снижает производительность ввода-вывода) и добавляет индекс, который, строго говоря, не нужен. Нет необходимости идентифицировать сущность - существующий ключ делает это - и это приводит новых разработчиков к вредным привычкам. (В частности, давая каждой таблице целочисленный столбец с именем «id» и полагая, что только этот столбец - единственный ключ, который вам нужен.)
Вам, вероятно, понадобится один или несколько из этих проиндексированных.
- a_id
- b_id
- {a_id, b_id}
- {b_id, a_id}
Я считаю, что Oracle должен автоматически индексировать {a_id, b_id}, потому что это первичный ключ. Oracle автоматически не индексирует внешние ключи. Руководство Oracle по индексированию в сети.
В общем, вам нужно тщательно подумать, нужно ли вам ON UPDATE CASCADE
или ON DELETE CASCADE
. В Oracle вам нужно только тщательно продумать, нужно ли вам ON DELETE CASCADE
. (Oracle не поддерживает ON UPDATE CASCADE
.)