我应该更改此db设计中的任何内容吗?

时间:2013-07-16 05:34:14

标签: mysql hibernate database-design

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

The design

2 个答案:

答案 0 :(得分:2)

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

  • 您需要从逻辑上思考如何使用数据库并从中创建设计。在我看来,项目是系统的中心,所以一切都应该围绕实体来考虑。
    • 项目有很多Sprint。
    • Sprint有很多故事。
    • 一个故事有很多StoryTasks。
    • 每个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关联的所有Stories的列表,您可以使用该结构来创建一个简单的查询

    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"

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

答案 1 :(得分:0)

我建议将id字段定位到第一个位置,每个表都应该有主键,并且每个主键应该彼此具有不同的名称。

赞:project =&gt; project_idperson =&gt; person_id,.......

此操作可以帮助您部署数据库查询和应用程序。 希望这会有所帮助。