我在这里有一些问题,不知道它是如何工作的。 所以我有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)
有人可以向我解释它是如何工作的吗?我必须指明我有cid.
是等同的说法是这样的:
CREATE TABLE Enrolled
(sid CHAR(20) foreign key references Students(sid),
cid CHAR(20) foreign key references Courses(cid)
)
答案 0 :(得分:1)
PRIMARY KEY
表示UNIQUE
和NOT NULL
。
如果您希望sid
和cid
也是FOREIGN KEY
,则必须单独指定。
主键有两个字段通常用于表,它是多对多关系的物理表示。在您的数据库设计图中,您将STUDENT
和COURSE
作为实体,ENROLLMENT
作为它们之间的多对多关系。
在物理数据库图中,多对多关系被建模为表,通常对实体表具有复合PRIMARY KEY
和FOREIGN KEY
约束。
答案 1 :(得分:1)
PRIMARY KEY(sid,cid)表示复合主键..这些字段的组合应该是唯一的。
答案 2 :(得分:0)
PRIMARY KEY
用于标识表格。定义为PRIMARY KEY
的字段或列将在该表的每一行中包含不同的值,并且必须具有值(因此,PRIMARY KEY
等同于UNIQUE
和{{ 1}})。
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
等,因为最好提高索引性能(所有{{ 1}}已经定义了bigint
,并且使用“数字”值比使用“字符串”值更快。