Вот некоторые реальные примеры типов отношений:
Один-к-одному (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 (таблица «one») должен быть вторичным ключом таблицы B (таблица «many»).
Например:
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
);
Многие ко многим (М: М)
Отношение много-ко-многим тогда и только тогда, когда одна запись из таблицы 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)
);