Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL外键实现_Sql_Database_Oracle_Foreign Keys - Fatal编程技术网

SQL外键实现

SQL外键实现,sql,database,oracle,foreign-keys,Sql,Database,Oracle,Foreign Keys,我必须在SQL上创建大学数据库表 我有三张桌子: 大学、教员和系 它们都有主键id 所以,当我创建department表时,我必须添加university和faculty表的外键,还是只有faculty id就足够了 我必须为id使用哪种类型的密钥?主要的还是唯一的?我不太理解他们之间的区别 对不起,我的英语不好 如果层次结构为university->faculty->department,则将university\u id放入faculty表,将faculty\u id放入department

我必须在
SQL
上创建大学数据库表

我有三张桌子:

大学、教员和系

它们都有主键
id

所以,当我创建department表时,我必须添加
university
faculty
表的外键,还是只有faculty id就足够了

我必须为id使用哪种类型的密钥?主要的还是唯一的?我不太理解他们之间的区别


对不起,我的英语不好

如果层次结构为
university->faculty->department
,则将
university\u id
放入faculty表,将
faculty\u id
放入department表


主键
唯一约束
非空约束
(以及物理表的顺序)的组合。

大学、学院和系这三个表的主键唯一标识该表中的每一行。要在每个表之间建立关系,应该有一个外键关系


主键和唯一约束之间的区别在于主键不允许空值,但可以有一个空值作为唯一键。它们都唯一地标识表中的每一行,不允许重复。

@a_horse_with_no_name我正在使用Oracle数据库。主键还有一个语义含义,即它被认为是表行的权威标识值。它也应该是不可变的(即永不更改),这不是唯一密钥的情况。唯一键也可以具有NOTNULL约束。一个很好的例子是,您可以提供一个具有NOTNULL约束的唯一键来定义表中行的排序顺序。这当然可以改变,并且通常不会被视为行的标识符。