0

今後のイベントの基本情報を格納する Tbl_Event というテーブルがあります。

Tbl_Event

EventID  Description  Location

スタッフ情報を格納するstaffという別のテーブルがあります

  Tbl_Staff

 StaffID  Name

これで、各イベントに複数のスタッフ メンバーを配置できるようになりました。これを実現するために、新しいテーブルを作成しました。

   tbl_Event_Staff

   RecordID  StaffID   EventID

StaffID と EventID には、COMBINED 一意制約があります。スタッフの1人がイベントのスーパーバイザーである必要があるという追加条件があります。これを達成するための最善の解決策は何ですか? tbl_event に追加の列を追加する必要があります - SupervisorID

Tbl_Event

EventID  Description  Location  SupervisorID

それを StaffID の tbl_Event_Staff にリンクします (この場合、これら 2 つのテーブル - EventID と StaffID の間に外部キーがあります)

または * これが冗長データに対する最善の解決策だとは思いません。

tbl_Event_Staff - isSupervisor(bool) に追加の列を追加する必要があります。各行には、そのイベントのスタッフがスーパーバイザーであるかどうかを示すブール変数があります。

 tbl_Event_Staff

   RecordID  StaffID   EventID   IsSupervisor
      1        10        3         true
      2        20        3         false
      3        30        3         false

また

代替ソリューションはありますか?

4

2 に答える 2

1

私は 2 番目の方法を使用しますが、可能な限り、各行の1EventID行のみがスーパーバイザーになるように、このテーブルに制約を設定します。

これを行う方法の詳細はデータベースによって異なります。システムによっては、トリガーを使用して強制する必要がある場合があります。SQL Serverでは、フィルター選択されたインデックスを使用して実行できます。

CREATE UNIQUE INDEX ON EventStaff (EventID) WHERE IsSupervisor = 1

また、プレフィックスを廃止することをお勧めtbl_します-SQLでオブジェクトの種類を区別するためにプレフィックスを使用する正当な理由はありません-言語の構文は、クエリ内の位置によって純粋にオブジェクトのタイプを伝えることができることを意味します-例外を除いて1つの状況。

私が参照する状況は、ビューとテーブルがクエリで同じ位置に表示され、区別できない場合があるということです。ただし、これは良いことです。一般に、扱っているオブジェクトがテーブルであるかビューであるかを気にする必要はありません。データベース開発者は、別のテーブル構造を自由に作成し、古い構造を再作成する必要があります。元のテーブルの代わりにビューを使用します。既存のクエリは影響を受けません。

于 2013-04-26T06:34:22.327 に答える