2013-03-11 55 views
3

我正在開發一個新的Web應用程序,爲此我還需要定義其數據庫結構。在另一個表中引用多個主鍵

問題是,我有一個名爲Department表,包含:

id: int 
name: varchar 

而另一臺名爲Employee

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

問題是僱員可能屬於多個部門和我無法弄清楚如何將該信息存儲在表格中,例如:

如果客戶端001屬於004,005和006部門比如何將這三個部門密鑰存儲在一列中,即Employee.dept?

我想出了一種可能的方式,可以將它們存儲爲分隔字符串,如「004,005,006」,但爲此,我將不得不將它們來回轉換爲字符串和整型,而不是搜索特定事件的字符串。

任何人都可以幫助我提出一個'高效'和正確的解決方案這個問題?

回答

8

不要將這些ID存儲爲逗號分隔值。這是一個非常糟糕的設計。適當地標準化表格。

這是一個Many-to-Many的關係。所以,你應該有你的架構三個表,

  • ID(PK)
  • 名稱

員工

  • ID(PK)
  • 名稱

Employee_Department

  • DepartmentID的(FK)
  • 僱員(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) 
) 
相關問題