Как создать столбец SQL, который может иметь несколько значений?

#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. В этом случае вам придется перейти к отношениям «многие ко многим», я отредактирую ответ для этого случая