まず、あなたの質問に実際に答えている人は誰もいないようです。
そのような構造を生成するクエリはどのように見えるでしょうか?
の要求された構造を持つ
トピック、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
(申し訳ありませんが、現時点ではMySqlにアクセスできないため、これはSQL Serverでのみテストされています)
また、あなたの構造はすでに正規化されています。反対の提案は、何をしたいのかについて仮定を立てることです。たとえば、電子メール アドレスに加えてユーザー名を追跡することに関心があると仮定します。これは非常に合理的ですが、それでも仮定です。正規化の観点からは、電子メール アドレスを一意のユーザー識別子として使用することに問題はありません。
さて、データベースのセットアップ方法に関する一般的な提案を探している場合は、それらの多くを提供できます。正規化する前に、可能性のあるキーワードをオブジェクト名として使用しないことから始めます (たとえば、'Name' や 'Date' などの列名を付けないでください)。
応答がない場合に値が NULL であるという Matt からのコメントについては、COALESCE() 関数を使用すると修正されます。COALESCE() は、最初の非 NULL 引数 (またはすべての引数が NULL の場合は NULL) を返します。したがって、MAX(r.Date) を MAX(COALESCE(r.Date, t.Date)) に置き換えます。