Какую связь использовать в SQL
Есть задание: приложение, позволяющее арендовать квартиры. Есть база данных postgresql. Создал схему task и в ней 3 таблицы:
- house с атрибутами: id (первый ключ), город, улица, комната, цена, описание, статус (арендована или нет, здесь ли её нужно вообще вставлять или нужна отдельная таблица с текущим состоянием?), время длительности аренды (тот же вопрос как и про статус).
- landlord (арендодатель): id (первый ключ), имя, фамилия, телефон, почта, кол-во квартир.
- tenant (арендатор): id (первый ключ), имя, фамилия, телефон, почта.
Конкретно по вопросам:
- Как понимать какую связь использовать?
- Как понять, что данные подходят в эту таблицу? Понимаю, что достаточно логично подумать, но в моём случае про статус квартиры интересно.
- Названия таблиц и их атрибутов должны быть с большой буквы или с маленьких?
- Правильно ли составил многие ко многим?
Ответы (1 шт):
Давайте объясню как строить схему базы данных исходя из сущностей. Сущностью будем считать запись/одна строчка в произвольной таблице.
Какие существуют связи между двумя таблицами.
Один к одному. Применяется в случаях когда одной сущности может соответствовать единственная сущность из другой таблицы. (Обычно применяется для хранения дополнительной информации к основной таблице. Пример. House (id, name) и HouseInfo(id, houseId, address, numberOfRooms, square ....)). Зачем разделять? Вам не всегда известны его детали, и зачастую нет большой необходимости.
Один ко многим. Когда одной сущности может соответствовать много сущностей из другой таблицы, которым соответствует только одна запись. House(id, name) , HouseStatus (id, houseId, statusId, start, end). У дома много различных состояний но каждое состояние соответствует только одному дому.
Много ко многим. Когда много различных сущностей соответствуют многим другим. Делается это обычно в 3 таблицы. House(id, name), HouseLandlord (id, houseId, landlordId, startDate, endDate, ...), Landlord (id, name,...). Когда две независимые сущности соединяются через промежуточную.
Решать какую связь использовать очень просто. Описываете каждую сущность как независимую и добавляете связи "если они конечно нужны". Если можно установить прямую связь добавляете колонку id зависимой получили один ко многим (в частном случае один к одному) если нет то добавляете промежуточную таблицу с id из обеих таблиц и получили много ко многим. Это обычная практика.
Но существуют также более сложные схемы когда приходится нарушать 3ю нормальную форму, но это уже совсем другая задача.
