3

私は新しいWebアプリケーションを開発しています。そのために、そのデータベース構造も定義する必要があります。

Department問題は、以下を含むというテーブルがあることです。

id: int
name: varchar

そして別のテーブルと呼ばれるEmployee

id: int
name: varchar
dept: Department.id(s) (Foreign Key)

問題は、従業員が複数の部門に所属している可能性があり、この情報をテーブルに保存する方法を理解できないことです。たとえば、次のようになります。

クライアント001がDepartment004,005および006に属している場合、これら3つの部門キーを1つの列(つまりEmployee.dept)に格納するにはどうすればよいですか?

「004,005,006」のような区切り文字列として保存する方法が1つあると思いましたが、そのためには、文字列を検索して特定のオカレンスを検索するよりも、文字列と整数に変換する必要があります。

誰かが親切にこの問題の「効率的」で正しい解決策を提案するのを手伝ってくれますか?

4

1 に答える 1

8

IDそれらをコンマ区切りの値として保存しないでください。それは非常に悪いデザインです。テーブルを適切に正規化します。

これはMany-to-Many関係です。したがって、スキーマには3つのテーブルが必要です。

デパートメント

  • ID(PK)
  • 名前

従業員

  • ID(PK)
  • 名前

Employee_Department

  • DepartmentID(FK)
  • EmployeeID(FK)

したがって、実際のDDLに変換すると、

CREATE TABLE Department
(
    ID INT,
    NAME VARCHAR(50),
    CONSTRAINT dept_pk PRIMARY KEY (ID),
    CONSTRAINT dept_uq UNIQUE(Name)
)

CREATE TABLE Employee
(
    ID INT,
    NAME VARCHAR(50),
    CONSTRAINT Emp_pk PRIMARY KEY (ID),
    CONSTRAINT Emp_uq UNIQUE(Name)
)

CREATE TABLE Employee_Department
(
    DepartmentID INT,
    EmployeeID INT,
    CONSTRAINT empdep_pk PRIMARY KEY (DepartmentID, EmployeeID),
    CONSTRAINT empdep_FK1 FOREIGN KEY (DepartmentID)
        REFERENCES Department(ID),
    CONSTRAINT empdep_FK2 FOREIGN KEY (EmployeeID)
        REFERENCES Employee(ID)
)
于 2013-03-11T06:20:01.323 に答える