Как я могу реализовать таблицу клиентов и счетов, показанную на диаграмме ER в SQL
1 ответ
С этими отношениями вам вряд ли понадобятся две таблицы. Между ними есть связь 1-1, даже при удалении. Это довольно близко к тому, чтобы сказать, что это одно и то же. Обычно клиенту разрешается иметь два аккаунта. Или клиенты могут существовать без активных учетных записей.
Один из способов - с помощью возвратных внешних ключей:
create table customers as (
customerId identity(1, 1) primary key,
accountId int not null,
. . .
);
create table accounts as (
accountId identity(1, 1) primary key
customerId int not null references customers(customerId)
. . .
);
alter table customers add foreign key (accountId) references accounts(accountId) on delete cascade;
(Я только что использовал identity()
как удобство для примера.)
Однако вы обнаружите, что вставка и удаление строк действительно сложны, потому что ссылки в этих двух таблицах должны синхронизироваться. Вы можете обойти это, используя транзакции или триггеры, или, в некоторых случаях, используя обновляемые представления.
Другой метод состоит в том, чтобы одна таблица была более "доминирующей" и делить первичный ключ между ними:
create table customers as (
customerId identity(1, 1) primary key,
accountId int not null,
. . .
);
create table accounts as (
customerId int primary key references customers(customerId)
. . .
);
Это не совсем завершает отношения. Это не гарантирует, что все клиенты имеют соответствующий аккаунт. Если вы попытаетесь восстановить эти отношения, у вас возникнут проблемы с изменением данных.
Наконец, вы можете просто создать одну таблицу, CustomerAccounts
, Это действительно решит вашу проблему. Все столбцы могут помещаться в одну таблицу, а удаления и вставки двух "сущностей" будут автоматически синхронизированы.