【问题标题】:Should i change anything in this db design?我应该更改此数据库设计中的任何内容吗?
【发布时间】:2013-07-16 05:34:13
【问题描述】:

作为一个 uni 项目,我正在为敏捷项目构建一个类似 jira 的简约项目管理工具。我将在 Java 和 Hibernate 中使用 MySql。到目前为止,这是我的数据库模式。 您会推荐任何更改吗?

【问题讨论】:

    标签: mysql hibernate database-design


    【解决方案1】:

    您向我们提供的关于您的要求的信息很少,但我会根据我的(非常有限的)经验尝试提出一些建议。

    • 您需要从逻辑上考虑您将如何使用您的数据库并从中创建您的设计。在我看来,项目是系统的中心,所以一切都应该围绕实体来考虑。
      • 一个项目有许多 Sprint。
      • 一个 Sprint 有很多故事。
      • 一个故事有很多故事任务。
      • 每个 StoryTask 都有一个分配的用户。
    • 所以从这个概念出发,我们已经有了一个简单的设计:

      Project --< Sprint --< Story --< StoryTask -- Person
      
    • 然后您可以更详细地考虑诸如“我是否希望我的用户能够处理多个任务?”之类的事情。如果答案是肯定的,那么您可以与 Person 建立一对多关系:

      Project --< Sprint --< Story --< StoryTask >-- Person
      
    • 并不是说您有您认为可行的基本设计,您可以更详细地考虑您的查询。例如,如果您想获得所有参与您项目的人员的列表,您将不得不编写一个长查询来连接和搜索所有涉及的表。对于常用功能,例如列出项目中的所有人员,您可以在 Person 和 Project 之间创建连接:

      Person* >-- Project --< Sprint --< Story --< StoryTask >-- Person*
      
    • 此外,如果您计划让一个人与多个项目相关联并且能够查询该人参与过哪些项目,则需要创建一个关系表

      Person* --< ProjectPersonnel >-- Project --< Sprint --< Story --< StoryTask >-- Person*
      

      最好在设计数据库之前考虑将要运行的查询。例如,如果您想要一个人参与过的所有项目的列表,您可以使用一个相对简单的查询

      SELECT
      proj.ProjectName
      FROM
      Person per
      LEFT JOIN ProjectPersonnel pp
      ON per.PersonId = pp.PersonId
      LEFT JOIN Project proj
      ON pp.ProjectId = proj.ProjectId
      WHERE
      per.FistName = 'Bob'
      

    如果您想要一个与项目中的 Sprint 相关联的所有故事的列表,您可以使用相应的结构来创建一个简单的查询

        SELECT
        story.StoryName
        FROM
        Story story
        LEFT JOIN Sprint sprint
        ON story.SprintId = sprint.SprintId
        LEFT JOIN Project proj
        ON sprint.ProjectId = proj.ProjectId
        WHERE
        proj.Name = "MyProject1"
        AND
        sprint.Number = "3"
    

    正如我所说,我在该领域没有太多经验,所以肯定有更好的建议 - 我只是希望这有点有用。

    【讨论】:

    • 不要忘记考虑数据报告需要什么,而不仅仅是数据输入。它对数据库的设计有很大的影响。
    【解决方案2】:

    我建议将id字段放在第一位,每个表都应该有主键,每个主键应该有不同的名字。

    喜欢:project => project_id , person => person_id, ....

    此操作将有助于您进行数据库查询和部署的应用程序。 希望这会有所帮助。

    【讨论】:

    • 除了重命名还有什么别的吗?
    • 是的。据我所知(大学课程(数据库设计)),您必须为每个字段名称添加前缀。例如在表project 中,字段变为:project_idproject_nameproject_description 或带有位前缀:pro_idpro_namepro_description
    猜你喜欢
    • 1970-01-01
    • 2011-05-21
    • 2012-03-16
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多