繁体   English   中英

sql中的主键

[英]Primary keys in sql

我在这里有一些问题,不知道它是如何工作的。 所以我有2个学生表并注册如下:

CREATE TABLE Students 
 (sid CHAR(20), 
 name CHAR(50), 
 email CHAR(30), 
 age INTEGER, 
 gr INTEGER) 

CREATE TABLE Enrolled 
 (sid CHAR(20), 
 cid CHAR(20), 
 grade CHAR(2), 
PRIMARY KEY (sid,cid)) 

所以我不明白这个特殊的行PRIMARY KEY (sid,cid)有人可以向我解释它是如何工作的吗? 我必须指定我有另一个表Courses的课程cid.

是等同的说法是这样的:

CREATE TABLE Enrolled
(sid CHAR(20) foreign key references Students(sid),
cid CHAR(20) foreign key references Courses(cid)
)

PRIMARY KEY表示UNIQUENOT NULL

如果您希望sidcid也是FOREIGN KEY ,则必须单独指定。

具有用于主键的两个字段通常用于表,其是多对多关系的物理表示。 在您的数据库设计图中,您将把STUDENTCOURSE作为实体,将ENROLLMENT作为它们之间的多对多关系。

在物理数据库图中,多对多关系被建模为表,通常具有复合PRIMARY KEY和对实体表的FOREIGN KEY约束。

PRIMARY KEY(sid,cid)表示复合主键..这些字段的组合应该是唯一的。

PRIMARY KEY用于标识表。 定义为PRIMARY KEY的字段或列将在该表的每一行中包含不同的值,并且必须具有值(因此, PRIMARY KEY等效于UNIQUENOT NULL )。

PRIMARY KEY可以是单个字段,也可以是多个字段,但它始终满足“每行将具有不同的PRIMARY KEY ”。

如果您将2列的组合声明为PRIMARY KEY ,则可以使用此示例:

CREATE TABLE Enrolled 
 (sid CHAR(20), 
 cid CHAR(20), 
 grade CHAR(2), 
PRIMARY KEY (sid,cid)) --PRIMARY KEY with combination of 2 columns

sid   |   cid   |   grade
1          1         XX
1          2         XX
2          1         XX
2          2         XX
2          3         XX

在此示例中,您可以看到列sid或列cid分别重复了值,但没有重复的(sid, cid)组合。

就像PRIMARY KEY用于标识表中的行一样,当我们想要关联两个表时,我们可以在一个表中定义一个FOREIGN KEY来将这个表与另一个表相关联。

您的情况是ENROLLED表由复合PRIMARY KEY标识,以表示多对多关系。 这就是说:

  • 学生可以参加许多课程。
  • 一门课程可以招收很多学生。

在此输入图像描述

注意*:最佳做法是将PRIMARY KEYS定义为数值,例如integerbigint等,因为它可以更好地提高索引性能(所有PRIMARY KEYS本身都定义了一个INDEX ,它们使用“numeric”更快地工作“值比使用”字符串“值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM