C# 是否存在外键依赖于2主键?

C# 是否存在外键依赖于2主键?,c#,sql,C#,Sql,作为问题标题。示例:我有三个表:员工、教师、学生 一名员工的外键取决于学生的主键 一名员工的外键取决于教师的主键 我试过了,但我做不到。因为我理解你的问题: 一个外键可以引用两个不同的表吗 回答:不,它不能 您可以(也可能应该)轻松定义两个单独的外键: 员工是|有学生 员工是|有老师 您不能让外键链接到两个表 如果您可以控制表结构,那么使用不同的结构可能更有意义 table: Person table: EmployeeInfo (all information about being an

作为问题标题。示例:我有三个表:员工、教师、学生

一名员工的外键取决于学生的主键

一名员工的外键取决于教师的主键


我试过了,但我做不到。

因为我理解你的问题:

一个外键可以引用两个不同的表吗

回答:不,它不能

您可以(也可能应该)轻松定义两个单独的外键:

  • 员工是|有学生
  • 员工是|有老师

您不能让外键链接到两个表

如果您可以控制表结构,那么使用不同的结构可能更有意义

table: Person
table: EmployeeInfo (all information about being an employee i.e. EmpNo, ClockNo etc) with a foreign key on Person
table: TeacherInfo (all information about being a teacher i.e. HomeRoom, subject etc) with a foreign key on Person
table: StudentInfo (all information about a student i.e. course, funding type etc) with a foreign key on Person

这样,通过一些简单的联接,您可以获得所有教师都是员工,或者所有学生都是员工,或者所有既不是教师也不是学生的员工,教师和员工的主键与人员表之间有外键。例如:

CREATE TABLE people
(
  id bigserial NOT NULL,
  first_name character varying(128) NOT NULL,
  last_name character varying(128) NOT NULL,
   -- other columns appropriate to a person
  CONSTRAINT people_pk PRIMARY KEY (id)
)


CREATE TABLE students
(
  fk_person bigint NOT NULL,
   -- other columns appropriate to the student
  CONSTRAINT students_pk PRIMARY KEY (fk_person),
  CONSTRAINT students_fk FOREIGN KEY (fk_person)
  REFERENCES people (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION
)

CREATE TABLE teachers
(
  fk_person bigint NOT NULL,
   -- other columns appropriate to the teacher
  CONSTRAINT teachers_pk PRIMARY KEY (fk_person),
  CONSTRAINT teachers_fk FOREIGN KEY (fk_person)
  REFERENCES people (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION
)

CREATE TABLE employees
(
  fk_person bigint NOT NULL,
   -- other columns appropriate to the employee
  CONSTRAINT employees_pk PRIMARY KEY (fk_person),
  CONSTRAINT employees_fk FOREIGN KEY (fk_person)
  REFERENCES people (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION
)

您还可以向人员添加一个鉴别器列,以便区分学生和教师,并在employees中对鉴别器列进行检查(或触发),以确保该表中仅包含教师和学生。有关鉴别器列的更多信息,请查看

您不能做什么?我怀疑您可能存在向后的数据关系。在其他事情中,一个人可能同时是老师和学生吗?@claudio Redi:外键这个表指的是其他两个主键table@Clockwork-缪斯:我希望代码ID的学生和代码ID的老师成为帐户的雇员如果我以前是你们系统的学生,那么我的学校决定(当我还是学生的时候!)他们要我教一门课,会发生什么?
student
中有哪些数据也在
teacher
中?