uni プロジェクトとして、アジャイル プロジェクト用のプロジェクト管理ツールのようなミニマルなジラを構築しています。Java と Hibernate で MySql を使用します。これまでのところ、これが私のデータベース スキーマです。変更をお勧めしますか?
2 に答える
あなたの要件についてほとんど情報を提供してくれませんでしたが、私の(非常に限られた)経験に基づいていくつかの提案をしようと思います.
- データベースをどのように使用するかを論理的に考え、そこから設計を作成する必要があります。私の意見では、プロジェクトはシステムの中心であるため、すべてはエンティティを中心に考えるべきです。
- プロジェクトには多くのスプリントがあります。
- スプリントには多くのストーリーがあります。
- ストーリーには多くの StoryTask があります。
- 各 StoryTask にはユーザーが割り当てられています。
このコンセプトから、すでにシンプルなデザインができています。
Project --< Sprint --< Story --< StoryTask -- Person
次に、「ユーザーが複数のタスクで作業できるようにするか?」などのことを考えて、より詳細に検討できます。答えが「はい」の場合、Person から 1 対多の関係を持つことができます。
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'
プロジェクト内のスプリントに関連付けられたすべてのストーリーのリストが必要な場合は、そのための簡単なクエリを作成するための構造が整っています
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"
私が言うように、私はこの分野で多くの経験を持っていないので、間違いなくより良い提案がそこにある - 私はこれがいくらか役立つことを願っています.