首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在下面的示例中,我能以某种方式改进表之间的关系吗?

在下面的示例中,我能以某种方式改进表之间的关系吗?
EN

Database Administration用户
提问于 2015-06-28 01:36:51
回答 1查看 77关注 0票数 1

我目前正在为学校管理系统开发一个数据库.有GRADESECTIONSHIFT的桌子.

代码语言:javascript
复制
GRADE
====
id PRIMARY KEY

SECTION
====
id PRIMARY KEY

SHIFT
====
id PRIMARY KEY

还有另一个表,它包含这样的数据,称为GROUP通过外键,外键还有一个主键.

代码语言:javascript
复制
GROUP
====
id PRIMARY KEY
grade_id FOREIGN KEY REFERENCES GRADE(id)
section_id FOREIGN KEY REFERENCES SECTION(id)
shift_id FOREIGN KEY REFERENCES SHIFT(id)

现在我有一个污名化的污点,并希望有更多经验的设计师的建议.一个名为SUBJECT的表,它包含引用GRADE和主键的外键(某一等级总是有相同的科目)。

代码语言:javascript
复制
SUBJECT
====
id PRIMARY KEY
grade_id FOREIGN KEY REFERENCES GRADE(id)

现在,除了主键之外,我还有一个名为CLASS的表,它通过外键引用SUBJECTPROFESSORGROUP .

代码语言:javascript
复制
CLASS
====
id PRIMARY KEY
subject_id FOREIGN KEY REFERENCES SUBJECT(id)
professor_id FOREIGN KEY REFERENCES PROFESSOR(id)
group_id FOREIGN KEY REFERENCES GROUP(id)

我想知道,如果在CLASS表引用上向下钻取一个级别,就可以通过两种不同的方式访问相同的GRADE (通过SUBJECTGROUP)。我不包括表的代码,因为我确实认为这会使这个问题变得更长,当然还有更多的表。我的数据库已经实现,并与适当的应用程序工作,但我想看看设计是否可以改进。提前谢谢。*注:我知道,在我的案例阐述中,我使用保留词作为表名,但只是为了说明性目的,也不包括所有的表格.我也有一个STUDENT表,作为对GROUP的引用,这就是为什么我在这样的表中包含了一个主键。我希望现在我的问题得到更好的解释,我是新来的这类网站。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2015-06-28 16:21:22

考虑到我已经理解了这个问题,下面的图片描述了(数据库的一部分),其中从AB的箭头对应于表A到表B的外键:

实际上,Grades是由GroupsSubjects引用的,如果通过这两种关系中的一种访问,那么每个类都必须具有相同的等级。

我认为在这种情况下你有两个选择:

  1. 保持此模式,并检查(可能是用触发器),当您插入一个类时,它指的是同一等级的课程和科目,或者
  2. 更改架构,将外键从Subject中移除为Grade,如果需要查找某一主题的等级,则将该表与类、课程和年级相结合。这样你就简化了情况,但你可以创造出与特定成绩无关的科目。

我很喜欢第一种解决方案:但是,在这两种解决方案中,重要的是插入表GradeSubjectCourseClasses中的对象,同时注意不要引起不一致。这样做的最佳方法是在数据库存储过程中定义操作多个对象和/或执行所有正确的检查,并要求应用程序(S)只使用它们,而不显式地插入记录。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/105332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档