0

uni プロジェクトとして、アジャイル プロジェクト用のプロジェクト管理ツールのようなミニマルなジラを構築しています。Java と Hibernate で MySql を使用します。これまでのところ、これが私のデータベース スキーマです。変更をお勧めしますか?

デザイン

4

2 に答える 2

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"

私が言うように、私はこの分野で多くの経験を持っていないので、間違いなくより良い提案がそこにある - 私はこれがいくらか役立つことを願っています.

于 2013-07-16T18:38:06.043 に答える