#sql #postgresql #relational-database
Вопрос:
Я создал таблицу в SQL с использованием PostgreSQL под названием «арендаторы». Ниже приведен код для арендаторов:
create table tentants (
id bigserial not null primary key,
tenant_name varchar(1000) not null,
offices int not null,
number int not null,
email varchar(1000)
Я хочу включить возможность добавления нескольких значений в «офис» в случае, если арендатор арендует более одного офиса. Я не хочу использовать для этого JSON. Я попытался создать связанную таблицу под названием «офисы», но это могло позволить мне добавить только один офис на одного арендатора.
Каков наилучший подход для этого?
Комментарии:
1. Создайте другую таблицу для хранения
(tenant, office)
пар.
Ответ №1:
Вы можете использовать текст, который работает для меня с идентификаторами, разделенными запятыми, как это
4,3,67,2
В любом случае правильным подходом была бы другая таблица и назовите ее tenant_offices
tenant_offices
columns >
tenant_id
office_id (well ofcourse you should have atleast an office table)
Комментарии:
1. Предложение списка, разделенного запятыми, — очень , очень плохой совет.
Ответ №2:
Вы можете создать "tenant_offices"
таблицу (как вы делали раньше), имеющую такую структуру : id, tenant_id, office_id,...
где id
находится первичный ключ "tenant_offices"
таблицы и tenant_id
и office_id
являются внешними ключами.
tenant_id
который относится к вашей tenants
таблице и office_id
который относится к вашей offices
таблице.
Поэтому здесь арендатор может арендовать несколько офисов.
Надеясь просветить вас или помочь !
Ответ №3:
Я предполагаю, что отношения между арендатором и офисом один ко многим (то есть офис может быть арендован только одним арендатором)
Затем вам нужно создать табличные офисы с внешним ключом, который указывает на арендатора:
CREATE TABLE offices (
id bigserial not null primary key,
tenant_id bigserial foreign key references tenants(id))
additional columns if needed
обратите внимание, что в этой версии вы не будете сохранять историю арендной платы (вам придется запустить обновление в офисах, чтобы изменить идентификатор арендатора).
ИЗМЕНИТЬ: В случае отношений «многие ко многим» (что также позволит нам сохранить историю арендной платы) нам необходимо создать таблицу отношений:
CREATE TABLE TenantsOffices (
id bigserial not null primary key
tenant_id bigserial foreign key references tenants(id),
office_id bigserial foreign key references offices(id),
start_date datetime,
end_date datetime)
Полезная информация: https://www.sqlshack.com/learn-sql-types-of-relations/
Комментарии:
1. Что вы делаете, если отношения между многими и многими связаны с офисами? Некоторые офисы могут участвовать в совместном использовании, и они разделяют оплату.
2. В этом случае вам придется перейти к отношениям «многие ко многим», я отредактирую ответ для этого случая