Во-первых, мне кажется, что 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)
Кроме того, ваша структура ЕСТЬ уже нормализована. Противоположные предложения основаны на предположениях о том, что вы хотите сделать, например, в предположении, что вы заинтересованы в отслеживании имен пользователей в добавлении к адресам электронной почты. Это вполне разумно, но, тем не менее, является предположением. С точки зрения нормализации, нет ничего плохого в использовании адреса электронной почты в качестве уникального идентификатора пользователя.
Теперь, если вы ищете общие предложения по созданию базы данных, мы можем дать вам МНОГО из них. Перед нормализацией я бы начал с того, что не использовал потенциальные ключевые слова в качестве имен объектов (например, не задавал имена столбцов, такие как «Имя» и «Дата»).
Что касается комментария Мэтта о том, что значение NULL при отсутствии ответов: использование функции COALESCE () исправит это. COALESCE () возвращает первый аргумент, отличный от NULL (или NULL, если все аргументы равны NULL). Поэтому замените MAX (r.Date) на MAX (COALESCE (r.Date, t.Date)).
person
Rob3C
schedule
03.01.2009