[英]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
表示UNIQUE
和NOT NULL
。
如果您希望sid
和cid
也是FOREIGN KEY
,则必须单独指定。
具有用于主键的两个字段通常用于表,其是多对多关系的物理表示。 在您的数据库设计图中,您将把STUDENT
和COURSE
作为实体,将ENROLLMENT
作为它们之间的多对多关系。
在物理数据库图中,多对多关系被建模为表,通常具有复合PRIMARY KEY
和对实体表的FOREIGN KEY
约束。
PRIMARY KEY(sid,cid)表示复合主键..这些字段的组合应该是唯一的。
PRIMARY KEY
用于标识表。 定义为PRIMARY KEY
的字段或列将在该表的每一行中包含不同的值,并且必须具有值(因此, PRIMARY KEY
等效于UNIQUE
且NOT 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
定义为数值,例如integer
, bigint
等,因为它可以更好地提高索引性能(所有PRIMARY KEYS
本身都定义了一个INDEX
,它们使用“numeric”更快地工作“值比使用”字符串“值)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.