.net 引用另一个表中的多个主键
我正在开发一个新的web应用程序,为此我还需要定义它的数据库结构 问题是我有一个名为.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
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)
)