【发布时间】:2013-07-16 05:34:13
【问题描述】:
作为一个 uni 项目,我正在为敏捷项目构建一个类似 jira 的简约项目管理工具。我将在 Java 和 Hibernate 中使用 MySql。到目前为止,这是我的数据库模式。 您会推荐任何更改吗?
【问题讨论】:
标签: mysql hibernate database-design
作为一个 uni 项目,我正在为敏捷项目构建一个类似 jira 的简约项目管理工具。我将在 Java 和 Hibernate 中使用 MySql。到目前为止,这是我的数据库模式。 您会推荐任何更改吗?
【问题讨论】:
标签: mysql hibernate database-design
您向我们提供的关于您的要求的信息很少,但我会根据我的(非常有限的)经验尝试提出一些建议。
所以从这个概念出发,我们已经有了一个简单的设计:
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"
正如我所说,我在该领域没有太多经验,所以肯定有更好的建议 - 我只是希望这有点有用。
【讨论】:
我建议将id字段放在第一位,每个表都应该有主键,每个主键应该有不同的名字。
喜欢:project => project_id , person => person_id, ....
此操作将有助于您进行数据库查询和部署的应用程序。 希望这会有所帮助。
【讨论】:
project 中,字段变为:project_id、project_name、project_description 或带有位前缀:pro_id、pro_name、pro_description