- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建毕业项目管理系统的数据库。学生分为小组。有小组表和教师表。每组有一名指导老师和两名考官。我在这里很困惑。我应该从教师表中创建 3 个 FK 吗? 2 个给考官,1 个给顾问?
这是 SQL 代码:
create table groups
(
groupID NUMBER not null,
nbStudents NUMBER not null,
avgGPA DOUBLE NOT NULL,
projectName varchar(50) not null,
advisorID NUMBER
examiner1ID NUMBER
examiner2ID NUMBER
primary key (groupID)
);
create table faculty
(
name varchar(30) not null,
facultyID NUMBER(10) not null,
email varchar(30) not null,
mobile NUMBER(15) not null,
type varchar
primary key (facultyID)
);
alter table groups
add constraint FK_EX1 foreign key (examiner1ID)
references faculty (facultyID) ;
alter table groups
add constraint FK_EX1 foreign key (examiner2ID)
references faculty (facultyID) ;
alter table groups
add constraint FK_EX1 foreign key (advisorID)
references faculty (facultyID) ;
最佳答案
编辑待处理...请参阅我的第一条评论。
只要说出找到的外键即可。
外键表示表中的列中的值必须显示为另一个(可能是相同的)表中的列的值,其中相应的列形成键。因此,在给定的设计中,只需在找到 FK 时声明它们即可。
虽然这些并不是真正的FK。首先,在 SQL 中,FK 声明实际上声明了一个外部 super 键。其次,因为这些列可以为 NULL。 SQL 说明了它将如何检查它们,并且它不会检查列何时为 NULL,而这正是您想要的。但该约束并不是外( super )键。我们只是在 SQL 数据库中这样调用它。
找到描述您的申请情况的陈述,然后进行规范化。
本身具有多个列并不是非标准化的。那是一个common misconception .
然而,至少对于理想的设计来说,它通常是禁忌的。只需找到一个参数化语句,该语句由列名参数化,用于您需要说明的有关情况的每件事。每个语句都有一个表。
// group [groupID] contains [nbStudents] students .... and has advisor [advisorID] and ...
groups(groupID,nbStudents,...,advisorID,examinerID)
使语句成立的行进入表中。找到描述您的申请情况所需的所有陈述。用使其陈述成立的行填充表格。
找到简单的语句并稍后重新排列为 NULL。
请注意,上述语句仅适用于没有 NULL 的行。但有时你想说,没有教师担任这些角色。
理想情况下你只是想要
// group [groupID] contains [nbStudents] students ... [projectName])
groups(groupID,nbStudents,...,projectName)
// [facultyID] advises [groupID]
advises(facultyID,groupID)
// [facultyID] examines [groupID]
examines(faculty,groupID)
每个小组的教职人员数量受到限制。如果你正确地编写了一个没有空值的关系设计,那么标准化你就会得到这种简单的东西。不用担心语句/表的数量。它们只是反射(reflect)了应用程序的复杂性。
但是 SQL DBMS 通常不容易支持约束。因此,出于与 SQL 或性能有关的某些原因,我们可能会重新安排。但首先要设计无空值。即选择简单的陈述然后标准化。然后重新合理安排。 (某些重新排列可能会导致非规范化,但在这种特殊情况下不会。)
空值使复杂化。
空值的一个问题是它们使表含义变得复杂。您使用 null 的设计有表 group
保存使此语句成立的行:
//*
group [groupID] contains [nbStudents] students ....
AND ( [advisorID IS NULL they have no advisor
OR [advisorID] IS NOT NULL AND advisor [facultyID] advises them)
AND ( [examiner1ID IS NULL AND [examiner2ID] IS NULL and they have no examiner
OR [examiner1ID] IS NOT NULL AND [examiner2ID] IS NULL AND [examiner1ID] examines them
OR [examiner1ID] IS NULL AND [examiner2ID] IS NOT NULL AND [examiner2ID] examines them
OR [examiner1ID] IS NOT NULL AND [examiner2ID] IS NOT NULL
AND [examiner1ID] examines them AND [examiner2ID] examines them)
*//
groups(groupID,nbStudents,...,advisorID,examinerID)
除非你在查询时把空值切回上面的简单表,否则你的查询含义也像这样复杂。即查询给出的行使此类语句为真。
最重要的是,当 SQL 中保留空值时,您会得到复杂的答案,不意味着“...并且教师未知”。
人们对基表中的此类空值有直观的理解。但设计首先要简单、合理。稍后重新安排。确保在查询时正确删除无空部分并保留无空部分。
关于mysql - 来自同一个表的多个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24243417/
我试图弄清楚如何为聊天气泡制作外 Angular 圆形设计,以获得所需的结果: 我必须使用气泡作为不同背景的组件,没有相同和纯色,但有一些设计元素,所以气泡周围的空间必须是透明的: 我试过将元素添加为
我尝试了 display:table-cell 但它没有用。我怎样才能在div中显示这个词。现在它显示溢出了 div。我在我的网页上使用 CSS2。提前致谢。 Visit W3Schools
我有一个使用 CSS 隐藏在 View (对于移动设备)之外的菜单: #filter-column { position:absolute; left:-400px; } 当用户单击链
我想创建一个这样的问题行 http://imageshack.us/photo/my-images/200/questionh.png/ 此时我的html源是: question label
我要mock a class with Ruby . 如何编写处理样板代码的方法? 以下代码: module Mailgun end module Acani def self.mock_mail
请不要担心循环,但我的问题是关于这些关键字:outer、middle 和 inner。它们不是声明为实例变量,为什么IDE让代码编译?我在谷歌上搜索了一下,这是java标签吗? Java中的某种关键字
我有一个数据框(df),看起来像, Id Name Activity. 1 ABC a;sldkj kkkdk 2 two
Elasticsearch内存中有哪些东西可以使搜索如此快速? 是所有json本身都在内存中,还是仅倒排索引和映射将在内存中24 * 7? 最佳答案 这是一个很好的问题,然后简而言之就是: 不仅仅是数
我正在尝试添加用户在用户界面上选择的值。对于数据库中的特定列,我已经与数据库建立了连接,当我按“保存”时,新的 id 会添加到数据库中,控制台中不会显示任何错误,但我要提交的值不会放入数据库,我怎样才
我不确定这个问题是否应该涉及电子领域,但由于它是关于编程的,所以我在这里问了它。 我正在制作一个数字时钟,使用由移位寄存器供电的 LED,而不是 7 段显示器。无论如何,当使用 CCS 编译代码时,我
我希望用户在 div 中选择文本 (html)。然而,这样做会在浏览器中显示选择背景,也在 div 之外。 我可以用(参见 http://jsfiddle.net/lborgman/aWbgT/)来防
我有以下 Razor View @{ ViewBag.Title = "UserCost"; }
我使用 KineticJS 和 D3.js 制作了以下内容。当用户将鼠标悬停在其中一个点上时,我使用 KineticJS 让我弹出工具提示。但是,由于 Canvas 的边界,工具提示似乎被切断了。有没
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我正在使用 primefaces 学习 Java Web 和 jsf。 我的项目当前只有一个index.xhtml 文件,当我访问localhost:8080/appname/时,index.xhtm
我是 ios 新手。 我有一个 View ,其中我使用 Quarts 核心绘制了一个圆圈。 我在该圆圈中放置了一个 UIButton,并赋予了拖放该按钮的功能。 现在我想要限制按钮不能被拖出那个圆圈区
这个问题已经有答案了: How to add two strings as if they were numbers? [duplicate] (20 个回答) How to force JS to
我正在创建简单的文本从右侧滑动到页面的 css 动画。我正在使用 jQuery 通过向元素添加一个类来触发动画。但是起始位置必须在视口(viewport)之外,这会触发底部滚动条出现。如何预防? 这是
我编写了一个简单的代码来评估一段代码并将输出写入文件。这样它减少了我的一些,因为我需要很多很多文件,每一行都包含返回值! 无论如何,我正在使用的代码是: #!/usr/bin/ruby -w def
所以我试图在我的一款游戏中加入一个非常基本的“手电筒”式的东西。 我让它工作的方式是在我的游戏屏幕顶部有一个层,这个层会绘制一个黑色矩形,不透明度约为 80%,在我的游戏场景顶部创建黑暗的外观。 cc
我是一名优秀的程序员,十分优秀!