引用另一个表中的多个主键

Mav*_*ven 3 .net sql database

我正在开发一个新的Web应用程序,为此我还需要定义其数据库结构.

问题是我有一个名为的表Department,包含:

id: int
name: varchar
Run Code Online (Sandbox Code Playgroud)

另一张桌子叫 Employee

id: int
name: varchar
dept: Department.id(s) (Foreign Key)
Run Code Online (Sandbox Code Playgroud)

问题是员工可能属于多个部门,我无法弄清楚如何在表格中存储此信息,例如:

如果客户001属于Department 004,005和006而不是如何将这三个部门密钥存储在一列,即Employee.dept?

我发现有一种可能的方法可以将它们存储为分隔字符串,如"004,005,006",但为此,我必须将它们来回转换为字符串和int,然后搜索字符串以查找特定事件.

谁能帮助我建议一个'有效'和正确的解决方案来解决这个问题?

Joh*_*Woo 8

不要将它们存储ID为逗号分隔值.这是一个非常糟糕的设计.正确地将表格标准化.

这是一种Many-to-Many关系.所以你的架构上应该有三个表,

部门

  • ID(PK)
  • 名称

雇员

  • ID(PK)
  • 名称

Employee_Department

  • DepartmentID(FK)
  • 员工ID(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)
)
Run Code Online (Sandbox Code Playgroud)