Для чего-то подобного ... вам нужна максимальная нормализация, чтобы у вас не было нигде дублирующих данных. Поскольку ваши пользовательские таблицы могут содержать записи одного и того же типа, я думаю, что для этого вам может потребоваться значение 3NF .
Мое предложение будет таким: взорвите свои таблицы, чтобы у вас было что-то близкое к 6NF с EAV, чтобы каждый вопрос, на который должны ответить пользователи, имел свою собственную таблицу. Затем все созданные вами таблицы будут ссылаться на одну из ваших таблиц вопросов. Это позволяет избежать дублирования вопроса данных. (Например, вам не нужна запись в группе «MovieGoers» с именем «Джон Браун» и запись в группе «Экстремальные виды спорта» с именем «Джонни Б.» для того же пользователя; не хочу, чтобы его ответ «какой ваш любимый цвет» был «синим» в одной группе и «красным» в другой. Любые данные, которые могут охватывать группы, например общие вопросы, будут нормализованы в этой форме.)
Основным недостатком этого является то, что у вас будет много таблиц, и вы, вероятно, захотите создать представления для своих статистических запросов. Однако, с точки зрения чистой целостности данных, это будет хорошо работать.
Обратите внимание, что вы, вероятно, могли бы избежать использования только общих полей, если бы вы действительно этого хотели. Примеры общих полей: имя, местоположение, пол и другие; Вы также можете сделать то же самое для общих вопросов, таких как «какой ваш любимый цвет» или «у вас есть домашние животные» или что-то в этом роде. Вопросы группы, которые не охватывают группы, могут быть сохранены в отдельной таблице для этой группы без разбора. Я бы не советовал, потому что он не был бы таким же гибким, как вариант с чистой 6NF, и вы рискуете дублировать (как вы заранее определяете, какие вопросы не будут общими вопросами?), Но если бы вы действительно этого хотели, вы могли бы сделай это.
Здесь есть хороший вопрос о 6NF: Хотелось бы понять 6NF с примером
Я надеюсь, что это имело смысл, и я надеюсь, что это помогает. Если у вас есть какие-либо вопросы, оставьте комментарий.