0

私は多くのスレッドを調べましたが、それを理解できませんでした。これが重複する質問である場合は申し訳ありません。次の設定を検討してください。

1)従業員=>(ID、名前)

2)部門=>(ID、名前、場所、店員、会計士、中間管理職、グループマネージャー、地域マネージャー、アクティブ)

部門には、多くの店員、会計士、中間管理職などを配置できます。彼らは、従業員テーブルの従業員にすぎません。データの重複、更新の異常、ジャンクションテーブルの減少がないDepartmentエンティティには、より優れたデータベーススキーマ(Divisional-Managerとして新しい列を追加するなどの柔軟性が必要)が必要です。

前もって感謝します!:)

4

6 に答える 6

1

このようなものが必要です。

部門の従業員ERD

CREATE TABLE department(
    dept_id      int    NOT NULL,
    dept_name    char(10)    NULL,
    CONSTRAINT PK1 PRIMARY KEY NONCLUSTERED (dept_id)
)
go


CREATE TABLE department_employee(
    id         int    NOT NULL,
    dept_id    int    NOT NULL,
    emp_id     int    NOT NULL,
    CONSTRAINT PK3 PRIMARY KEY NONCLUSTERED (id)
)
go


CREATE TABLE employee(
    emp_id      int    NOT NULL,
    emp_name    char(10)    NULL,
    CONSTRAINT PK2 PRIMARY KEY NONCLUSTERED (emp_id)
)
go


ALTER TABLE department_employee ADD CONSTRAINT Refdepartment1 
    FOREIGN KEY (dept_id)
    REFERENCES department(dept_id)
go

ALTER TABLE department_employee ADD CONSTRAINT Refemployee2 
    FOREIGN KEY (emp_id)
    REFERENCES employee(emp_id)
go
于 2011-05-05T14:04:55.523 に答える
1

多対多の関係があるため、3 番目の関連付け (ジャンクション) テーブルが必要です。これを避けることはできません。

DepartmentMember => (DepartmentId、EmployeeId、MembershipRole)

なぜこれが欲しくないのですか?

于 2011-05-05T13:59:57.793 に答える
0

従業員は 1 つの部門でのみ働くことができると仮定します。そうでない場合は、はい、重複を避けるために 3 番目のテーブルが必要です

従業員

ID, Name, EmployeeType, DepartmentID
(pk on ID, EmployeeType)

デパートメント

ID, Name, Active
于 2011-05-05T14:02:38.797 に答える
0

部門 =>(ID,employeeID,location,active) Employee =>(EmployeeID,name, position)

これは、テーブルを整理するためのより良い方法だと思います。これは、active が部門のプロパティであることを前提としています。それ以外の場合は、employee テーブルに移動します。

于 2011-05-05T13:58:13.850 に答える
0
Employee =>(ID,name, department_ID, position_ID, Active)
Position =>(ID, name, Active)
Department => (ID,Name,location,Active)
于 2011-05-05T14:01:48.943 に答える
0

役職/役職は、部署の文脈に大きく依存します。ある部門の地域マネージャーになることができ、さらに別の部門でコンサルタントの地位に就くことができます。

次に、部門と従業員は多対多です。位置への従業員も多対多です。部門の新しいタイトルを追加するなど、柔軟性が必要な場合は、ジャンクション テーブルが必要です。避けることはできません。

参照用に、次のテーブル構造を参照できます。

Employee 
-----------------------
EmployeeID (PK)
EmployeeName
Active

Department 
-------------------------
DepartmentID (PK)
DepartmenName
Location

Position 
----------------------------
PositionID (PK)
PositionDescription (eg.Clerk, Accountant etc)

EmployeePosition 
----------------------------
EmployeeID  (FK to Employee.EmployeeID )
DepartmentID (FK to Department.DepartmentID)
PositionID (FK to Position.PositionID )

役職/役職が部門ではなく従業員に固定されている場合、つまり、事務員であり、1 つまたは複数の部門でその地位に就くことができる従業員の場合、どうすればよいでしょうか?

極端な場合、多くの従業員が独自の特別な肩書を持つことができるということですか? 彼らは多くの部門に属していますか?はいの場合、従業員 ID 123 が「The Special One」という特別な肩書を持っており、IT、アカウント、および営業部門に属しているとします。最初にこのタイトル (つまり、"The Special One") をPosition テーブルに作成し、Position.PositionID.

次に、これと IT 、 Account 、 Sales 部門の Department ID をEmployeePosition 使用して、 Employee.EmployeeID 123 の 3 つのレコードをテーブルに挿入します。Position.PositionID

于 2011-05-05T14:15:19.063 に答える