Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 引用另一个表中的多个主键_.net_Sql_Database - Fatal编程技术网

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

.net 引用另一个表中的多个主键,.net,sql,database,.net,Sql,Database,我正在开发一个新的web应用程序,为此我还需要定义它的数据库结构 问题是我有一个名为Department的表,其中包含: id: int name: varchar 和另一个名为Employee id: int name: varchar dept: Department.id(s) (Foreign Key) 问题是一名员工可能属于多个部门,我无法确定如何在表中存储此信息,例如: 如果客户端001属于部门004005和006,那么如何将这三个部门密钥存储在一列中,即Employee.dep

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

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

id: int
name: varchar
和另一个名为
Employee

id: int
name: varchar
dept: Department.id(s) (Foreign Key)
问题是一名员工可能属于多个部门,我无法确定如何在表中存储此信息,例如:

如果客户端001属于部门004005和006,那么如何将这三个部门密钥存储在一列中,即Employee.dept

我发现有一种可能的方法可以将它们存储为分隔字符串,如“004005006”,但为此,我必须将它们来回转换为string和int,然后搜索字符串中的特定事件


有谁能帮我为这个问题提出一个“有效”和正确的解决方案吗?

不要将那些
ID
存储为逗号分隔的值。这是一个非常糟糕的设计。正确地规范化表格

这是一种多对多关系。所以在模式中应该有三个表

  • ID(主键)
  • 名字
雇员

  • ID(主键)
  • 名字
员工服务部

  • 部门ID(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)
)