Ничего плохого.
Я не говорю, что предоставленный DDL показывает правильно нормализованные таблицы, но они несколько нормализованы. Как вы определили, две таблицы имеют разные цели, они имеют разное значение, поэтому технически (теоретически, академически и на практике [код]) они верны.
- «относится к одним и тем же родителям» не является критерием (есть много случаев, когда существует множество таблиц, относящихся к одним и тем же родителям и которые являются правильными)
- поэтому такие таблицы будут "иметь одинаковые PK и FK", так что это тоже не критерий.
Только тот, кто не имеет реального понятия о нормализации и не имеет понятия о причинах отрицательной производительности, предложит, что «только потому, что у них одни и те же родители (и, следовательно, одна и та же пара ключей / индексов)», они должны быть объединены .
Голосование и Фаворит - это две разные вещи, сущности, записи о предпринятых действиях. Две таблицы верны.
Различие: Истинная причина, по которой IsDownVoted больше нельзя сравнивать, заключается в том, что он не относится к избранным. Вы использовали индикатор (бит), чтобы идентифицировать это (хотя и плохо назвали); который действительно заменяет пустой столбец. Нули не годятся для производительности, и хорошо, что у вас есть индикаторы, позволяющие идентифицировать отсутствие данных, и, следовательно, вы избегаете пустых значений, но это отдельное от взлома нормализованного проекта путем их простоты.
Объединенная таблица будет работать медленнее при любом доступе. Когда вы выбираете из него голоса, вы должны исключить избранное и наоборот, но он будет выполнять ввод-вывод для обоих, потому что они расположены вместе (PostId, UserId). SO сервер всегда читает в два раза больше строк, используя вдвое больше кеша; и т.д. Затем вы «добавите скорость» путем добавления индекса для (PostId, UserId, IsFavourited), что сделает его еще более медленным для вставок и удалений (в то время как «ускорение» выбирает). Мессы составляются, гарантировано; Лучше всего не иметь никакого беспорядка во-первых.
Когда база данных увеличивается, вы можете независимо добавлять столбцы в один из голосов и Избранное, не влияя на другие. В объединенной таблице это приведет к осложнениям.
Вы принимаете ответы слишком быстро.