Как я могу реализовать таблицу клиентов и счетов, показанную на диаграмме ER в SQL - PullRequest
0 голосов
/ 13 мая 2018

Как реализовать таблицу клиентов и счетов, показанную на диаграмме ER в SQL.

  1. Каждый клиент имеет ровно 1 аккаунт.
  2. Каждый аккаунт принадлежит ровно 1 клиенту.
  3. При удалении клиента, соответствующая строка учетной записи также должна быть удалена

enter image description here

1 Ответ

0 голосов
/ 13 мая 2018

При таких отношениях вам вряд ли понадобятся две таблицы. Между ними есть связь 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. Это действительно решит вашу проблему. Все столбцы могут помещаться в одну таблицу, и операции удаления и вставки двух «сущностей» будут автоматически синхронизированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...