Я думаю, что суть того, что вы спрашиваете: должно ли состояние вопроса основываться на промежуточной таблице между вопросами и состоянием, в которой есть компонент времени (A), или таблица должна быть более статичной, но с журнал истории на стороне (B).
(Примечание: если вы хотите сделать чистую версию (A), то Boofus прав, вы, вероятно, не поместили бы и state_id в таблицу вопросов, так как это избыточно; но это определенно было бы неудобно, потому что это будет делать простые запросы, чтобы получить вопросы в определенном состоянии гораздо сложнее. Итак, у вас есть гибридная версия здесь.)
В общем, если требование хранить историческую информацию о состоянии действительно только для целей аудита - то есть, если оно не будет регулярно запрашиваться самим приложением - вам, вероятно, лучше использовать вариант B, потому что это немного проще (на самом деле есть только одна таблица «Вопросы», со справочной таблицей для состояний и таблицей «Журнал» для предыдущих состояний). Я думаю, что это показывает ваши намерения немного лучше.
Однако, если семантика приложения является более сложной (например, если у вас есть запросы типа «показать все вопросы, которые были в состоянии X в течение последних 24 часов ...»), то такой подход, как (A), может привести к больше смысла. По сути, это превращает состояние вопроса в факт, зависящий от времени. Если вы сделаете это, просто знайте, что это усложняет ситуацию - либо все ваши запросы сложнее и требуют времени, либо вам нужно беспокоиться о том, чтобы синхронизировать state_id в вопросах с самым последним состоянием в таблице вопросов. Если вы идете по этому пути, возможно, назовите его «current_state» или что-то в вопросах, так что ясно, что это своего рода производная информация.