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

本文关键字:关系 帮助 数据库 | 更新日期: 2023-09-27 17:55:30

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

  1. 用户
  2. 线程
  3. 评论
  4. 主题

应建立关系的方式:

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

数据库的工作方式:
我想在我的代码中使用SQL命令INSERT INTO(),在不同的阶段。但通常这里是描述:
当用户注册他的:ID被设置时,姓名,通行证,电子邮件得到。(插入到用户表中)
当他提交问题时,设置了线程 ID,问题标题和段落插入到线程表(线程表)中。
所有线程都是按日期在页面上生成的(我在线程表中放置了一个特殊字段)。
注释表的工作方式与线程的工作方式相同,但它也有 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 个下拉列表)。
每个线程都有很多评论。
每条评论都有评论响应。

我是构建数据库的新手。 我阅读了一些关于如何构建表关系和数据库的内容。 但在我部署所有内容之前,我需要您对我可以进行的改进的建议? 以及对设计的一般意见!!

我使用 C#, asp.net, Visual Studio 2010

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

在大多数情况下,

我认为你的设计很好。但是,我建议通过为主题、主题和子主题制作单独的表或创建一个自引用表来规范主题表:

主题

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

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

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