我正在开发一个新的Web应用程序,为此我还需要定义它的数据库结构。
问题是我有一个名为Department
的表,其中包含:
id: int
name: varchar
另一张名为Employee
id: int
name: varchar
dept: Department.id(s) (Foreign Key)
问题是员工可能属于多个部门,我无法弄清楚如何在表格中存储此信息,例如:
如果客户001属于Department 004,005和006而不是如何将这三个部门密钥存储在一列,即Employee.dept?
我发现有一种可能的方法可以将它们存储为分隔字符串,如“004,005,006”,但为此,我必须将它们来回转换为字符串和int,然后搜索字符串以查找特定事件。
有人可以帮我建议一个'有效'和正确的解决方案吗?
答案 0 :(得分:8)
请勿将这些ID
存储为逗号分隔值。这是一个非常糟糕的设计。正确地将表格标准化。
这是Many-to-Many
关系。所以你的架构应该有三个表,
系
员工
Employee_Department
所以当翻译成真正的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)
)