Во-первых, мне кажется, noboody на самом деле отвечает на ваш вопрос, который был:
Как будет выглядеть запрос или запросы для создания такой структуры?
с запрошенной структурой
Тема, LastModified, # Ответы.
SQL для создания таблицы результатов с этой структурой, учитывая предоставленные вами структуры таблиц, будет:
SELECT t.Id, t.Name AS Topic,
MAX(r.Date) AS LastModified,
COUNT(*) AS NumReplies
FROM Forum_Topic t
LEFT OUTER JOIN Forum_Reply r ON t.id = r.topic_id
GROUP BY t.Id, t.Name
(извините, это тестируется только на SQL Server, так как в данный момент у меня нет доступа к MySql)
Кроме того, ваша структура IS уже нормализована. Предложения об обратном делают предположения о том, что вы хотите сделать, например, предполагая, что вы заинтересованы в отслеживании имен пользователей при добавлении к адресам электронной почты. Это вполне разумно, но, тем не менее, является предположением. С точки зрения нормализации нет ничего плохого в использовании адреса электронной почты в качестве уникального идентификатора пользователя.
Теперь, если вы ищете общие рекомендации по настройке базы данных, мы можем дать вам МНОГО таких. Перед нормализацией я бы начал с того, чтобы не использовать потенциальные ключевые слова в качестве имен объектов (например, не давать имена столбцов, такие как «Имя» и «Дата»).
Что касается комментария от Мэтта о том, что значение равно NULL, когда нет ответов: использование функции COALESCE () исправит это. COALESCE () возвращает первый ненулевой аргумент (или NULL, если все аргументы равны NULL). Поэтому замените MAX (r.Date) на MAX (COALESCE (r.Date, t.Date)).