需要数据库表关系的帮助!

时间:2011-05-07 08:42:29

标签: c# asp.net relational-database

我正在尝试构建一个与此站点有点类似的站点。基本上我已经建立了四个表:

  1. 用户
  2. 线程
  3. 评论
  4. 主题
  5. 建立关系的方式:

    用户收到了很多评论 用户有很多线程 每个线程都有自己的主题,主题,子主题(主题表,我基本上用作标签)。

    数据库的工作方式:
    我想在我的代码中使用sql命令INSERT INTO(),在各个阶段......但通常这里是描述:
    当用户注册他的时:ID已设置,名称,通过,已获得电子邮件。 (插入用户表)
    当他提交一个问题时,设置了ThreadID,问题标题和段落插入到线程表(线程表)中 所有线程都是在日期的页面上生成的(我在线程表中放了一个特殊字段) 注释表就像线程一样工作,但它也有ta注释响应字段。

    这是布局:

    用户

    UserID (primarty key: Linked to comments and threads).
    Login
    Password
    Email
    

    线程

    ThreadID (primary key: linked to Comments Table)
    UserID
    TopicsID
    Comments
    Date
    ThreadTitle
    ThreadParagraph(question details)
    

    评论

    CommentsID (primary key: didnt link it to any other field in any other table)
    UsersID
    ThreadsID
    Date
    Comments
    CommentResponse
    

    的主题

    TopicsID (primary key: linked to Threads table)
    Theme
    Topic
    Subtopic
    

    设计背后的理念:
    每个用户都有许多他可以修改的评论和主题 主题用作标签(我将在稍后将它们链接到3个下拉列表) 每个帖子都有很多评论 每条评论都有评论回复/。

    我是建立数据库的新手。我读了一下如何构建表关系和数据库。但在我部署一切之前,我需要你对我可以做出的改进的建议吗?关于设计的一般意见!!!

    PS。我使用c#,asp.net,visual studio 2010

1 个答案:

答案 0 :(得分:0)

在大多数情况下,我认为你的设计很好。但是,我建议通过为主题,主题和子主题创建单独的表或创建自引用表来规范化主题表:

<强>主题

TopicID (int, primary key, not null)
ParentTopicID (int, null)
Name (nvarchar(50), not null)

这将有助于更有效地使用存储(您不再复制数据中的主题和主题名称)并为您提供更大的灵活性(您可以使用此设计拥有无限级别的分层标记)。

此外,没有必要在列名称前加上表格的名称,例如: Threads.ThreadTitle。在这种情况下,我建议将Threads.ThreadTitle重命名为Threads.Title,将Threads.ThreadParagraph重命名为Threads.Paragraph。