Как правильно сделать структуру баз данных?

Есть две таблицы клиентов (юр. лицо и физ. лицо, поля абсолютно разные) и таблица Счет. Как правильно организовать связь Счета с Клиентами (у каждого клиента может быть несколько счетов)? Если добавить в
Таблицу Счет FK на таблицу Юр.Лицо и FK на таблицу Физ.Лицо, такой вариант будет правильным. Но если в будущем добавятся еще разновидности клиентов, то как быть тогда? Плодить FK на клиентов в таблице Счета?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
Для такой задачи хорошо подходит паттерн Фаулера Class Table Inheritance, задача которого -- сделать некое наследование в таблицах БД.

Принцип в ваших терминах:
Создается некая сущность Client, и у нее наследуются сущности ЮрЛица и ФизЛица, связаны они 1 к 1, то есть на 1 клиента приходится либо одно физлицо, либо одно юрлицо, разруливается это неким маппингом через условное поле type в таблице клиента, нужно только соблюсти момент, чтобы id у физлица не пересекались с юрлицом, например используя uuid или любым другим способом создавать id, например через автоинкремент таблицы клиента.

Если вы будете реализовывать бекенд на языке PHP, то ORM Doctrine из коробки умеет работать с такой структурой: Документация.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы