SQL 数据库设计指南

Posted

技术标签:

【中文标题】SQL 数据库设计指南【英文标题】:SQL Database design guidance 【发布时间】:2015-11-17 02:43:51 【问题描述】:

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

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

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

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

但由于某种原因,我觉得我没有正确处理这个问题。我觉得应该把一个用户和一个部门联系起来,也许把部门和客户联系起来?

关于我正在尝试做的事情,我希望有人可以指导我正确设计数据库。

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

【问题讨论】:

【参考方案1】:

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

tbl 部门:

身份证 部门名称

tblDocumentOne:

身份证 部门ID 文档名称

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

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

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

更新:

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

tblProject:

身份证 项目名称 客户端ID 用户ID

tblProjectDetails:

身份证 项目ID 文档ID

【讨论】:

感谢您的意见。所以如果我有很多不同的文件,我会在项目表中列出它们吗?即使不是所有这些文件都会被使用?

以上是关于SQL 数据库设计指南的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 开发指南

创作赢红包SQL Server之索引设计

Oracle PL SQL专家指南 高级PL/SQL解决方安案的设计与开发

sql 程序设计指南信息系统

每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

MySQL开发指南