多对多关系和一对多关系之间有什么区别?

时间:2012-11-11 06:29:51

标签: sql-server-2008

我在SQL Server数据库的逻辑设计方面存在问题。

我仍然不能区分哪个关系必须是一对多,哪一个必须是多对多。 有人告诉我,如果两个实体表都是独立的,它们可以有多对多的关系,否则它们会有一对多。

但是现在我正在开发一个收集员工个人信息的项目,其中一个部分有一个名为JobStatus的表,用于人员当前的工作。这个表与Person(表)的关系是多对多关系,当然它们之间有一个联结表。

我之所以建立了这种关系,是因为一个工作职位的名称被分配给了几个人并且表现不同。

例如:

Person A ----->Operator
Person B------>Operator and so on...

另一方面,有些人有两个职位,我的意思是他是导演和老师。

例如:

Person C ------>Director & Teacher

那么请你用这种模棱两可的逻辑指导我?

2 个答案:

答案 0 :(得分:2)

根据您描述的项目,我将创建三个表:employeeTable,jobType和jobAssignment。为每个员工提供一个唯一的ID(主键),并为每个作业提供唯一的ID(主键),并让jobAssignment表成为将employeeTable与jobAssignment表链接起来的粘合剂。 jobAssignment表将有一个关于employeeID和jobID的索引。

jobAssignment
---------------
employeeID (indexed)
jobID (indexed)


employeeTable
---------------
employeeID (primary key)
employeeName


jobType
---------------
jobID (primary key)
jobName
jobDescription

这样,无论为每位员工分配了多少职位描述,您都可以在jobAssignment表中跟踪员工及其各自的职位。

答案 1 :(得分:1)

简单地说,当任何一个表不能将来自另一个表的PK作为其外键时,你会认识到多对多

参加学生和课程表

  • 学生可以参加很多课程
  • 课程可以属于多个学生

当然将FK(CourseID)放在学生身上会限制学生参加一门课程

将FK学生(StudentID)纳入课程将限制课程为一名学生

要解决此问题,第三个表StudentCourse将具有StudentID和CourseID,因此可以使表独立。

这是多对多。

对于一对多,当您可以轻松地将一个表的ID作为另一个表的FK时,就会发生这种情况。

在您的情况下,两名员工可以同时担任运营商,员工可以是运营商和教师 - 该设计可能很多。你是对的