【问题标题】:Database design guidelines数据库设计指南
【发布时间】:2015-11-19 04:03:02
【问题描述】:

我已经设法让我的数据库有些设计。到目前为止,它看起来像以下

这就是场景。重点是我的项目表。一个项目属于一个客户。所以我可能会为 SO 创建一个项目。该项目可以有许多在该项目上工作的用户(图像显示错误的关系)。这些用户中的每一个都属于一个部门。所以我和 Bob 可能正在为 SO 开发一个项目,我属于 Marketing 而 Bob 属于 Finance。

这就是我感到困惑的地方。每个部门都有一组需要为项目完成的文件。营销部门可能需要编写文档 a 和文档 B,而财务部门可能需要编写文档 C。

假设我做了这样的事情

我基本上是说一个部门有一份或多份文件。但是你可以看到它变得一团糟。如何证明 Marketing 有 documentA 和 documentB 而 Finance 有 documentThree?

我是否需要将营销和财务定义为与部门表的一对一关系,然后从该表中生成文档?这会产生类似的东西

这是正确的方法吗?本质上,我需要将不同的文档链接到不同的部门,实现这一点的最佳方法是什么?

谢谢

【问题讨论】:

    标签: database database-design


    【解决方案1】:

    我个人不喜欢这两种方法;因为当表中的数据几乎输入相同时,他们会为每种文档类型创建单独的表。在这些情况下,我更倾向于使用一张桌子。

    我将有一个文档表,其中包含一个类型,该类型指示文档类型,并且是 DocumentType 表的外键,该表列出了所有文档类型。

    根据为项目和部门选择文档类型的方式,我将有一个 DepartmentDocuments 表,其中列出了每个部门可以使用的文档。我还将有一个 ProjectDepartmentDocuments 表,该表指示用于特定项目的强制性和可选文档,以及特定于部门/项目的信息。

    我也质疑用户与项目的关系。似乎一个项目只能有一个用户。如果是这样的话,你的设计就很好。但是,如果一个项目可以有很多用户,您应该有一个 projectUsers 表来处理多对多关系。

    【讨论】:

    • 感谢您的回复。我有一个后续问题。此应用程序将生成文档。假设文档彼此非常不同,并且我通过表单为每个文档收集数据,这是否需要为每个文档提供单独的表格?谢谢
    • 有两种方法。一种方法是有一个文档表,其中列出了每个文档的字段,以及一个单独的表来存储这些键控对的值。这种方法的挑战是报告可能很麻烦,因为数据是垂直的而不是水平的,这意味着如果需要对文档进行报告和汇总,则使用第二种方法可能会更好。但是,如果每个文档都独立于其他文档并且不需要聚合,则第一个选项可能是最好的。第二个选项是单独的表。这里的挑战是新表/每个文档的代码。
    • 谢谢,我创建了一个新主题,为这个特定问题提供了更多细节。如果你有时间,如果你能检查一下,那就太好了。谢谢。 stackoverflow.com/questions/32221734/…
    猜你喜欢
    • 2015-11-17
    • 2011-04-11
    • 2016-03-02
    • 2010-09-27
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多