Как лучше спроектировать БД?

356
20 января 2018, 01:35

Есть 2 типа пользователей и у каждого примерно 11 видов форм обратной связи (у каждого типа свои поля), в каждой 15-30 полей и многие поля в которых одинаковы (от 50% до 70%). Как лучше ее спроектировать? и соответственно как потом лучше вынимать данные, например если нужно вывести все формы заполненные конкретным пользователем?

Answer 1

Можно использовать БД с поддержкой наследования таблиц. Я использую для этого 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);

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

READ ALSO
Передача переменной JavaScript в PayPal счет

Передача переменной JavaScript в PayPal счет

Есть такой сайтСтоимость детали рассчитывается с помощью функции:

314
PHP вопрос про конкатенацию

PHP вопрос про конкатенацию

Есть такой фрагмент кода:

264
Какой правильный формат запроса к БД для работы с полем даты

Какой правильный формат запроса к БД для работы с полем даты

У меня такая ситуацияЕсть бд где есть поле date_add

219