5

次のデータベース設計への参加を強制する最善の方法が何であるかはわかりません (SQL サーバー、Oracle、mySQL などの場合があります)。Factory と Worker の 2 つのテーブルがあります。設計のために 2 つのルールを作成しました。1) 各工場は少なくとも 1 人 (または多数) の労働者を雇用します。2) 各労働者は、厳密に 1 つだけの工場で働きます。

デザインの ERD を作成しました。

[工場]-||--- 雇う ---|<-[労働者]

FACTORY テーブルは次のようになります。

Factory_ID (PK) Factory_Name


1A2B3C _
_

WORKER テーブルは次のようになります。

Worker_ID (PK) Worker_Name Factory_ID (FK)

1 トム 2
2 アン 1
3 ヤン 1

worker テーブルでは、Factory_ID は外部キー (FK) であり、NOT NULL に設定されています (ERD によると) 各ワーカーは 1 つのファクトリで 1 つのみで作業する必要があるためです。この参加は、FK (Worker テーブルの Factory_ID フィールド) を null 以外に設定することで強制できます。

これが私の質問です。参加を強制する最善の方法は何ですか? 各工場は少なくとも 1 人の労働者を雇っていますか? つまり、worker テーブルで各 factory_id を少なくとも 1 回参照する必要があることを確認する必要があります。そのため、現在、工場 3 は ERD の参加規則に違反する人を雇用していません。

この参加を強制する最善の方法は何でしょうか?

4

1 に答える 1

5

リレーションシップに対する 1+ の制約は、通常、アプリケーション層で実装されます。

  • ストアド プロシージャ
  • トリガー
  • バックエンドのビジネス層
  • フロントエンド
  • 前の任意の組み合わせ

問題は、予測するタイミングの概念があることです。この種の制限では、ファクトリのワーカーが必要になりますが、ワーカーにはファクトリ自体が必要です。これは、このルールを同期的に実装することはまったく不可能です。

解決策は、一種のバックオフィスを管理して要素を個別に追加し (管理目的で)、1+ の要件に一致する適切な制限を公の場で実装することです。例えば:

  1. 従業員を会社に移動するときは、少なくとも 1 人残っていることを確認してください
  2. 従業員が自分の会社を変更した場合に会社の代替を実装して、従業員ごとに常に 1 つの会社しか存在しないようにします。
于 2013-04-07T21:30:38.747 に答える