我在SQL Server数据库的逻辑设计方面存在问题。
我仍然不能区分哪个关系必须是一对多,哪一个必须是多对多。 有人告诉我,如果两个实体表都是独立的,它们可以有多对多的关系,否则它们会有一对多。
但是现在我正在开发一个收集员工个人信息的项目,其中一个部分有一个名为JobStatus
的表,用于人员当前的工作。这个表与Person
(表)的关系是多对多关系,当然它们之间有一个联结表。
我之所以建立了这种关系,是因为一个工作职位的名称被分配给了几个人并且表现不同。
例如:
Person A ----->Operator
Person B------>Operator and so on...
另一方面,有些人有两个职位,我的意思是他是导演和老师。
例如:
Person C ------>Director & Teacher
那么请你用这种模棱两可的逻辑指导我?
答案 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时,就会发生这种情况。
在您的情况下,两名员工可以同时担任运营商,员工可以是运营商和教师 - 该设计可能很多。你是对的