有没有人能举例说明如何在设计表格时实现一对一、一对多和多对多关系?
发布于 2016-04-15 02:34:43
以下是这些关系类型的一些实际示例:
一对一(1:1)
当且仅当表A中的一条记录与表B中的最多一条记录相关时,关系才是一对一的。
要建立一对一的关系,表B的主键(没有孤立记录)必须是表A的次键(有孤立记录)。
例如:
CREATE TABLE Gov(
GID number(6) PRIMARY KEY,
Name varchar2(25),
Address varchar2(30),
TermBegin date,
TermEnd date
);
CREATE TABLE State(
SID number(3) PRIMARY KEY,
StateName varchar2(15),
Population number(10),
SGID Number(4) REFERENCES Gov(GID),
CONSTRAINT GOV_SDID UNIQUE (SGID)
);
INSERT INTO gov(GID, Name, Address, TermBegin)
values(110, 'Bob', '123 Any St', '1-Jan-2009');
INSERT INTO STATE values(111, 'Virginia', 2000000, 110);
一对多(1:M)
当且仅当表A中的一条记录与表B中的一条或多条记录相关时,关系才是一对多关系。但是,表B中的一条记录不能与表A中的多条记录相关。
要建立一对多关系,表A(“一”表)的主键必须是表B(“多”表)的次键。
例如:
CREATE TABLE Vendor(
VendorNumber number(4) PRIMARY KEY,
Name varchar2(20),
Address varchar2(20),
City varchar2(15),
Street varchar2(2),
ZipCode varchar2(10),
Contact varchar2(16),
PhoneNumber varchar2(12),
Status varchar2(8),
StampDate date
);
CREATE TABLE Inventory(
Item varchar2(6) PRIMARY KEY,
Description varchar2(30),
CurrentQuantity number(4) NOT NULL,
VendorNumber number(2) REFERENCES Vendor(VendorNumber),
ReorderQuantity number(3) NOT NULL
);
多对多(M:M)
当且仅当表A中的一条记录与表B中的一条或多条记录相关时,关系才是多对多关系,反之亦然。
要建立多对多关系,请创建名为"ClassStudentRelation“的第三个表,该表将同时具有表A和表B的主键。
CREATE TABLE Class(
ClassID varchar2(10) PRIMARY KEY,
Title varchar2(30),
Instructor varchar2(30),
Day varchar2(15),
Time varchar2(10)
);
CREATE TABLE Student(
StudentID varchar2(15) PRIMARY KEY,
Name varchar2(35),
Major varchar2(35),
ClassYear varchar2(10),
Status varchar2(10)
);
CREATE TABLE ClassStudentRelation(
StudentID varchar2(15) NOT NULL,
ClassID varchar2(14) NOT NULL,
FOREIGN KEY (StudentID) REFERENCES Student(StudentID),
FOREIGN KEY (ClassID) REFERENCES Class(ClassID),
UNIQUE (StudentID, ClassID)
);
发布于 2020-03-03 03:27:23
一对多
一对多表关系如下所示:
在关系数据库系统中,一对多表关系基于引用父表表行的Primary Key
的子表中的Foreign Key
列来链接两个表。
在上图中,post_comment
表中的post_id
列与post
表id Primary Key
列具有Foreign Key
关系:
ALTER TABLE
post_comment
ADD CONSTRAINT
fk_post_comment_post_id
FOREIGN KEY (post_id) REFERENCES post
一对一
一对一的表关系如下:
在关系数据库系统中,一对一的表关系基于子表中的Primary Key
列链接两个表,该列也是引用父表表行的Primary Key
的Foreign Key
。
因此,我们可以说子表与父表共享Primary Key
。
在上图中,post_details
表中的id
列与post
表的id
Primary Key
列也具有Foreign Key
关系:
ALTER TABLE
post_details
ADD CONSTRAINT
fk_post_details_id
FOREIGN KEY (id) REFERENCES post
多对多
多对多表关系如下所示:
在关系数据库系统中,多对多表关系通过子表链接两个父表,子表包含引用两个父表的Primary Key
列的两个Foreign Key
列。
在上图中,post_tag
表中的post_id
列与post
表id Primary Key
列也具有Foreign Key
关系:
ALTER TABLE
post_tag
ADD CONSTRAINT
fk_post_tag_post_id
FOREIGN KEY (post_id) REFERENCES post
而且,post_tag
表中的tag_id
列与tag
表id的Primary Key
列具有Foreign Key
关系:
ALTER TABLE
post_tag
ADD CONSTRAINT
fk_post_tag_tag_id
FOREIGN KEY (tag_id) REFERENCES tag
https://stackoverflow.com/questions/7296846
复制相似问题