web-dev-qa-db-ja.com

SQL Serverデータベースフォーラムのデザインサンプル

私はSQL Server 2008 R2を使用してデータベースの設計を行っています。これは基本的に、(ゲームファンフォーラムと同様に)フォーラムの単純なデータベース設計です。幸運なことに、自分の作品とそれを比較するための無料のサンプルが見つからなかったので、私はそれに苦労しています。

一部の人々がコメントで要求したように、これは私がこれまでにやったことです:フォーラムでは、ユーザー(表)を検討しました。各ユーザーは投稿(表)を持ち、各投稿はトピック(表)を開始できます。

テーブルユーザー:ユーザーID(PK)、ニックネーム、電子メール、パスワード、AvatarImage。

テーブルポスト:PostID(PK)、UserID(FK)、DateTime、Description。

私に答えがない質問:-

  1. 投稿がトピックを開始できる可能性を提供するにはどうすればよいですか?新しいテーブルを作るべきですか?どの列?または、ストアドプロシージャの助けを借りて、postテーブルで何かを行うことができますか?
  2. トピックの後にトピックを作成するにはどうすればよいですか(質問に答えるなど)?
5
darking050

あなたはこのようなものを持っているかもしれません。投稿が新しいトピックの場合、ParentIDとReplyToIDはNULLになります。フォーラムの場合、投稿が別の投稿への返信であることを示すことが望ましい場合がありますが、それでもそれが属するトピックを示すため、2番目の列(ReplyToID)はこれを示すことができます。元の親への応答の場合、これはNULLにすることも、ParentIDと同じ値にすることもできます。

CREATE TABLE dbo.Posts
(
    PostID      INT IDENTITY(1,1) PRIMARY KEY,
    UserID      INT NOT NULL FOREIGN KEY REFERENCES dbo.Users(UserID),
    ParentID    INT NULL REFERENCES dbo.Posts(PostID),
    ReplyToID   INT NULL REFERENCES dbo.Posts(PostID),
    Content     NVARCHAR(MAX), -- more accurate than "description"

    -- ... other columns ...

    -- "DateTime" is not a good choice for a column name
    create_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    modify_date DATETIME NULL -- or same default as create_date
);
6
Aaron Bertrand

フィールドParentPostID(nullable)をテーブルPostに追加するだけで、トピックが取得されます。ParentPostIDがNULLの場合、これはトピックの開始投稿です。それ以外の場合、これはトピックのいくつかの投稿。しかし、ここではソリューション全体を入手することはできないと思います。

2
Alex_L