1

シーズンの概念が導入されるまで、スポーツ登録システムの簡単なスキーマがあります。

プレーヤーはチームの一員として登録します

チームはクラブの一員として登録します

チームはディビジョンでプレーします

組織は部門を作成します

これは毎シーズン起こります。そのため、季節ごとにこれらすべてを追跡する方法が必要です。ここで最善のアプローチは何でしょうか?「シーズン」エンティティを導入し、上記のすべてのエンティティ間に多対多の関係を作成する必要がありますか? または、シーズンごとにすべてを「アーカイブ」するだけでなく、すべてのシーズンベースのデータをその場でプルアップできる方法はありますか (レポートなどのために)?

4

1 に答える 1

2

この設計により、チームはシーズンごとに異なる部門に移動できますが、毎年再作成する必要はありません(ただし、ウィニペグジェットがフェニックスに移動し、古い名前を歴史的なシーズンに維持することはできません)統計)。

CREATE TABLE dbo.Organizations
(
  OrgID INT PRIMARY KEY,
  Name NVARCHAR(255) NOT NULL UNIQUE
  -- , ... other columns
);

CREATE TABLE dbo.Divisions
(
  DivisionID INT PRIMARY KEY,
  Name NVARCHAR(255) NOT NULL,
  OrgID INT NOT NULL FOREIGN KEY REFERENCES dbo.Organizations(OrgID)
  -- , ... other columns
  -- UNIQUE might be (Name) or (OrgID, Name)
);

CREATE TABLE dbo.Clubs
(
  ClubID INT PRIMARY KEY,
  Name NVARCHAR(255) NOT NULL UNIQUE,
  -- , ... other columns
);

CREATE TABLE dbo.Teams
(
  TeamID INT PRIMARY KEY,
  Name NVARCHAR(255) NOT NULL,
  ClubID INT NOT NULL FOREIGN KEY REFERENCES dbo.Clubs(ClubID)
  -- , ... other columns
);

今季節を追跡するために:

CREATE TABLE dbo.Seasons
(
  SeasonID INT PRIMARY KEY,
  StartDate DATE NOT NULL,
  EndDate DATE,
  Name NVARCHAR(255) NOT NULL -- e.g. '1997-98' for seasons that cross Jan 1
  -- , ... other columns
);

CREATE TABLE dbo.SeasonTeams
(
  SeasonID INT FOREIGN KEY REFERENCES dbo.Seasons(SeasonID),
  DivisionID INT FOREIGN KEY REFERENCES dbo.Divisions(DivisionID),
  TeamID INT FOREIGN KEY REFERENCES dbo.Teams(TeamID),
  PRIMARY KEY (SeasonID, DivisionID, TeamID)
);

チームが特定の年に複数の部門に所属するのを防ぐために、制約またはトリガーが必要になる場合があります。

ここで、特定のシーズン/チームの名簿も指定する必要があります。

CREATE TABLE dbo.Players
(
  PlayerID INT PRIMARY KEY,
  Name NVARCHAR(255) NOT NULL,
  -- , ... other columns
);

CREATE TABLE dbo.TeamRoster
(
  PlayerID INT NOT NULL FOREIGN KEY REFERENCES dbo.Players(PlayerID),
  TeamID INT NOT NULL,
  SeasonID INT NOT NULL, 
  DivisionID INT NOT NULL,
  FOREIGN KEY (TeamID, SeasonID, DivisionID) REFERENCES
    dbo.SeasonTeams (TeamID, SeasonID, DivisionID)
);

スケジュール、順位、プレーヤーの統計などのテーブルも必要になりますが、それが出発点になるはずです。

于 2012-06-05T02:14:08.983 に答える