Какую связь использовать в SQL

Есть задание: приложение, позволяющее арендовать квартиры. Есть база данных postgresql. Создал схему task и в ней 3 таблицы:

  1. house с атрибутами: id (первый ключ), город, улица, комната, цена, описание, статус (арендована или нет, здесь ли её нужно вообще вставлять или нужна отдельная таблица с текущим состоянием?), время длительности аренды (тот же вопрос как и про статус).
  2. landlord (арендодатель): id (первый ключ), имя, фамилия, телефон, почта, кол-во квартир.
  3. tenant (арендатор): id (первый ключ), имя, фамилия, телефон, почта.

Конкретно по вопросам:

  1. Как понимать какую связь использовать?
  2. Как понять, что данные подходят в эту таблицу? Понимаю, что достаточно логично подумать, но в моём случае про статус квартиры интересно.
  3. Названия таблиц и их атрибутов должны быть с большой буквы или с маленьких?
  4. Правильно ли составил многие ко многим?

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Aziz Umarov

Давайте объясню как строить схему базы данных исходя из сущностей. Сущностью будем считать запись/одна строчка в произвольной таблице.

Какие существуют связи между двумя таблицами.

  1. Один к одному. Применяется в случаях когда одной сущности может соответствовать единственная сущность из другой таблицы. (Обычно применяется для хранения дополнительной информации к основной таблице. Пример. House (id, name) и HouseInfo(id, houseId, address, numberOfRooms, square ....)). Зачем разделять? Вам не всегда известны его детали, и зачастую нет большой необходимости.

  2. Один ко многим. Когда одной сущности может соответствовать много сущностей из другой таблицы, которым соответствует только одна запись. House(id, name) , HouseStatus (id, houseId, statusId, start, end). У дома много различных состояний но каждое состояние соответствует только одному дому.

  3. Много ко многим. Когда много различных сущностей соответствуют многим другим. Делается это обычно в 3 таблицы. House(id, name), HouseLandlord (id, houseId, landlordId, startDate, endDate, ...), Landlord (id, name,...). Когда две независимые сущности соединяются через промежуточную.

Решать какую связь использовать очень просто. Описываете каждую сущность как независимую и добавляете связи "если они конечно нужны". Если можно установить прямую связь добавляете колонку id зависимой получили один ко многим (в частном случае один к одному) если нет то добавляете промежуточную таблицу с id из обеих таблиц и получили много ко многим. Это обычная практика.

Но существуют также более сложные схемы когда приходится нарушать 3ю нормальную форму, но это уже совсем другая задача.

→ Ссылка