4

私は SCM 用のリレーショナル データベースを設計しています (企業向けの情報システムの設計の一環として)。しかし、従業員とその部署との関係になると、私はいくつかのトラブルに見舞われました。

次のエンティティを設計しました。

  • Employee( ID , Fname , Mname , Lname , Sex , Phone , Address , Hiring date など )
  • Department( ID、名前)

また、関係は 1 対多であるため (すべての従業員は 1 つの部門だけで働く必要がありますが、すべての部門には多くの従業員がいます)、Department IDの属性に追加しましたEmployee。しかし、問題はMANAGE関係 (1 対 1) をどのように表現するかです。

Employee_manage_Department:とその属性が ( Employee ID , Department ID) で、両方の列が主キーの一部であるという新しい関係を設計することは有効ですか??

前もって感謝します

4

5 に答える 5

2

はい。ただし、会社の従業員の役割には (生涯) 時間が限られているため、DATE_FROM と DATE_TO という 2 つの新しい DateTime 列を追加して、DATE_FROM を構成された主キーの一部にします。

于 2012-08-18T20:29:53.703 に答える
1

Manager IDマネージャーと部門の関係は 1:1 であるため、従業員テーブルを参照する外部キーとして機能する a を部門テーブルに追加するだけです。

ここに画像の説明を入力

これにより、循環依存が発生し、新しいデータの挿入が妨げられます。これは、次のいずれかの方法で解決できます。

  • 循環 FK の 1 つを延期します (DBMS がサポートしている場合)。
  • NULLManager ID可能にします。マネージャーのいない部門の概念をサポートする必要がある場合に備えて、とにかくそれを行う必要があるかもしれません。

ところで、これにより、部門を別の部門の従業員が管理できます。それが望ましくない場合は、識別関係を使用して、同じ部門 ID が前後に伝播できるようにする必要があります。

ここに画像の説明を入力


注: 別のEmployee_manage_Department表は、M:N 関係のモデル化に適しています。

于 2012-08-19T04:23:43.770 に答える
0

部門のマネージャーは、常にその部門で働く従業員の 1 人ですか? 答えが「はい」の場合、従業員テーブルのブール MnagerFlag で十分です。

制約を宣言するか、部門内の複数の従業員がこのフラグを設定できないようにする規則を適用する必要があります。

于 2012-08-19T09:59:17.843 に答える
0

はテーブルに対する であり、一意で null でないEmployee.department_id必要があります。との制約を満たしますforeign_keyDepartmentOne Employee has one departmentOne department can have many employees

于 2012-08-18T20:25:49.020 に答える
0

いいえ、従業員が単一の部門にしか所属できない場合は、これが必要だとは思いませんが、従業員が複数の部門を持つことができる場合は、先に進むことができます...スタッフの開始日と終了日を教えてください。

于 2012-08-18T20:29:54.930 に答える