Внешний ключ объявляется в дочерней таблице и ссылается на родительскую таблицу.
В отношении 1: 1 может показаться, что DBC_USER
является родителем, а DBC_USER_PROFILE
- дочерним.Таким образом, вы объявляете внешний ключ в таблице DBC_USER_PROFILE
и ссылаетесь на таблицу DBC_USER
.Нечто подобное (синтаксис Oracle)
CREATE TABLE dbc_user_profile (
user_id int primary key,
<<more columns>>
constraint fk_user_profile_user_id foreign key (user_id)
references dbc_user( user_id )
)
В отношении 1 к m, как правило, довольно ясно, какая таблица является родительской, а какая дочерней.Родитель имеет 1 строку для m строк в дочернем элементе.Таким образом, вы объявляете внешний ключ в дочерней таблице и ссылаетесь на родительскую таблицу.
CREATE TABLE parent (
parent_id int primary key,
<<additional columns>>
);
CREATE TABLE child (
child_id int primary key,
parent_id int references parent( parent_id ),
<<additional columns>>
);
Для отношения m-to-m внешний ключ будет определен в таблице сопоставления и будет ссылаться на два родителя.столы.Таким образом, внешние ключи будут объявлены в таблице DBC_USER_CITY
и будут ссылаться на DBC_USER
и DBC_CITY
.Что-то вроде
CREATE TABLE dbc_user_city (
city_id int,
user_id int,
constraint pk_dbc_user_city primary key( city_id, user_id ),
constraint fk_dbc_user_city_city_id foreign key( city_id )
references dbc_city( city_id ),
constraint fk_dbc_user_city_user_id foreign key( user_id )
references dbc_user( user_id )
)
Очевидно, что синтаксис имеет тенденцию быть относительно специфичным для базы данных.В частности, для Oracle на сайте PSOUG имеется довольно полный список параметров синтаксиса.Для более общего справочника, включающего синтаксис для различных баз данных, вы можете использовать сайт w3schools .