Есть 2 типа пользователей и у каждого примерно 11 видов форм обратной связи (у каждого типа свои поля), в каждой 15-30 полей и многие поля в которых одинаковы (от 50% до 70%). Как лучше ее спроектировать? и соответственно как потом лучше вынимать данные, например если нужно вывести все формы заполненные конкретным пользователем?
Можно использовать БД с поддержкой наследования таблиц. Я использую для этого postgresql.
Допустим, есть абстрактная сущность - user_form. В этой сущности можно описать все поля, которые будут общими у всех сущностей.
CREATE TABLE user_form
(
id serial NOT NULL,
type character varying NOT NULL,
field1 character varying,
--.....
CONSTRAINT user_form_pkey PRIMARY KEY (id),
);
Далее сущность user_admin_form
CREATE TABLE user_admin_form
(
-- Унаследована from table user_form: id integer NOT NULL DEFAULT nextval('user_form_id_seq'::regclass),
-- Унаследована from table user_form: type character varying NOT NULL,
-- Унаследована from table user_form: field1 character varying,
field2 character varying,
CONSTRAINT user_admin_form_pkey PRIMARY KEY (id),
) INHERITS (user_form);
По аналогии можно создавать и другие дочерние таблицы. Обязательно используйте указатель типа записи для того, что бы определить, в какой таблице она находится, потому что все записи будут доступны в родительской таблице.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники