作为一个uni项目,我正在为敏捷项目构建一个简约的jira项目管理工具。我将使用MySql与Java和Hibernate。到目前为止,这是我的数据库架构。 你会推荐任何改变吗?
答案 0 :(得分:2)
您向我们提供的关于您的要求的信息很少,但我会尝试根据我(非常有限的)经验提出一些建议。
因此,从这个概念出发,我们已经有了一个简单的设计:
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_id
,person
=&gt; person_id
,.......
此操作可以帮助您部署数据库查询和应用程序。 希望这会有所帮助。