Динамически создавать таблицы MySql в PHP и отслеживать их - PullRequest
0 голосов
/ 30 октября 2018

У меня есть веб-сайт, на котором администратор будет управлять несколькими projects.

С точки зрения структуры, project - это просто таблица в базе данных. Все проекты будут иметь общие поля, но всегда будут иметь другие поля, которые отличаются от всех других проектов. в этих таблицах будет храниться информация о документах.

Моя задача - найти лучший способ описать это. Поскольку администратор может создать столько проектов, сколько он хочет, я подумал создать новую таблицу для каждого проекта, который он создает. Изначально все таблицы будут иметь одинаковые поля, но я позволю администратору создавать поля для каждой таблицы проекта.

Есть ли лучший способ сделать это? Или лучше создать таблицу, содержащую только определенные поля проекта, а затем объединить ее с основной таблицей, которая имеет все общие поля?

Мое решение - создать таблицу для каждого проекта, примерно так:

table_project1(id, title, created_on, project1_field1, project1_field2, ...)
table_project2(id, title, created_on, project2_field1, project2_field2, ...)

И так далее.

В этом примере поля id, title и created_on (в действительности существует около 10 общих полей) одинаковы для всех таблиц проекта, но тогда каждая таблица проекта будет иметь свои конкретные поля ( поля также будут созданы администратором)

Другая проблема заключается в том, что все поля, которые будут создаваться администратором динамически, я также должен иметь возможность поиска по ним, поэтому мне нужно отслеживать эти созданные поля.

Что будет лучшим или лучшим решением для этого?

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Как сказано в комментарии, я бы пошел с тремя таблицами:

1: Ваша главная таблица проекта с полями, которые всегда присутствуют:

projects_table (id, title, created_on, project1_field1, project1_field2, ...)

2: вторая таблица для отслеживания администратором дополнительных полей:

fields_table (id, projectId, name)

3: третья таблица для отслеживания значений добавленных полей:

values_table (id, projectId, fieldId, value)

Обратите внимание, что projectId в третьей таблице на самом деле не требуется, поскольку она уже присутствует во второй таблице. Добавлять или не добавлять лишние поля, подобные этим, зависит от того, что вы хотите сделать с данными, и от любых проблем с эффективностью, которые могут у вас возникнуть.

Вы можете добавлять столбцы в таблицы по мере необходимости, например created_on. Вы видите, как это будет работать?

0 голосов
/ 30 октября 2018

Поскольку у вас есть общие поля между проектами, я предлагаю вам поместить их в одну таблицу как следует:

Projects (id, title, created_on, ..., additional_fields_table_name)

Обратите внимание, что я добавил пользовательское общее поле с именем additional_fields_table_name, в этом поле будет храниться имя таблицы, которая будет содержать имя таблицы, в которой вы можете найти поля, связанные с этим проектом.

Например: Вы создали проект с именем Dev-1, затем создали для него дополнительные поля, они будут сохранены в виде, подобном Dev_1_additional_fields, они будут связаны с использованием id в качестве первичного / внешнего ключа.

Полагаю, вам это может пригодиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...