oracle 一对一建表,sql - 如何在设计表时实现一对一,一对多和多对多关系?

以下是一些关系类型的真实示例:

1:1

当且仅当表A中的一条记录与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:N

当且仅当表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),

Statusvarchar2(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)

);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值