我正在尝试构建一个与此站点有点类似的站点。基本上我已经建立了四个表:
建立关系的方式:
用户收到了很多评论 用户有很多线程 每个线程都有自己的主题,主题,子主题(主题表,我基本上用作标签)。
数据库的工作方式:
我想在我的代码中使用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
答案 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。