mysql - SQL 数据库设计指南

标签 mysql database database-design

我正在尝试设计一个数据库,但遇到了一些小问题。

我试图将项目详细信息存储在两个单独的页面上。当用户第一次创建一个新项目时,他们输入项目名称,然后选择用户和客户。我有一张图片可以证明这一点。

mockup of data-entry form for specifying a project name and such.

在此之后,用户被移动到项目页面。在这里,他们选择部门和该部门的文档(该部门将有多个文档可用),然后他们开始为所选文档填写所需信息。再一次,我有一个图像来演示。

mockup of a data-entry form for picking a Department and specifying brief name, due date, and such.

所以我有一个用户和客户表,并将其链接到我的项目表。然后我考虑将部门表链接到我的项目表。在部门表中,我将为所有不同的部门创建一个外键,然后为这些部门创建一个单独的表。对于各个表部门,我将拥有该部门需要完成的所有文档的外键。它不完整,但我的EER diagram看起来像这样。

Enhanced entity–relationship model diagram

但出于某种原因,我觉得我没有正确处理这个问题。我觉得一个用户应该链接到一个部门,也许部门链接到客户?

关于我正在尝试做什么,我希望有人能指导我正确设计数据库。

只是一些附加信息,在第一张图片中,Project Client 将预先填充客户,Project User 将预先填充用户。在第二张图片中,部门和文档将预先填充不同的部门,以及所选部门可用的文档。

最佳答案

因此,我认为 tblDepartments 和 tblDocumentOne 是您的关键点。我的想法:

部门:

  • 身份证
  • 部门名称

tblDocumentOne:

  • 身份证
  • 部门ID
  • 文件名

然后在 tblProjects 中,您只需要来自 tblDocumentOne 的 ID。稍后要获取部门名称,您只需连接上面的两个表即可。

如果表中的条目变化很大,如果您创建和修改了列,每个列都作为一个日期时间字段,可能会有所帮助。您可以创建这些触发的条目。

也许这对你来说也是一个要点:我不喜欢向用户显示普通 ID,因为很容易获得另一个值,尝试某种操作,......我为此使用 UUID,我也由触发器创建。该字段应为 varchar。

更新:

如果您的项目中有很多文档,那么我会“拆分”tblProjects,这意味着:

tbl项目:

  • 身份证
  • 项目名称
  • 客户编号
  • 用户ID

tblProjectDetails:

  • 身份证
  • 项目编号
  • 文档ID

关于mysql - SQL 数据库设计指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32169377/

相关文章:

mysql - 以什么顺序处理 ON DELETE CASCADE 约束?

php - 我应该将更新的计数作为用户表的一部分吗?

sql - 数据库设计: Alternate to composite keys?

php - mysql 语法错误,看不出什么问题

database - 在 webapp 中存储用户上传文件的最佳方式

c# - 如何让这个系统设计和逻辑更有效率? (内部消息系统)

database - 使用(顺序)GUID 是数据库生成 ID 的唯一可行替代方案吗?

mysql - 获取 MySQL 中分层类别的所有父级

MySQL连接字符集问题

mysql - 按最后日期分组 MYSQL