Может ли кто-нибудь объяснить, как реализовать отношения "один к одному", "один ко многим" и "многие ко многим" при разработке таблиц с некоторыми примерами?
Индивидуально: Используйте внешний ключ для указанной таблицы:
student: student_id, first_name, last_name, address_id
address: address_id, address, city, zipcode, student_id # you can have a
# "link back" if you need
Один-ко-многим. Используйте внешний ключ на стороне, связанной со связью, со ссылкой на "одну":
teachers: teacher_id, first_name, last_name # the "one" side
classes: class_id, class_name, teacher_id # the "many" side
Много-ко-многим. Используйте таблицу соединений (пример):
student: student_id, first_name, last_name
classes: class_id, name, teacher_id
student_classes: class_id, student_id # the junction table
Пример запросов:
-- Getting all students for a class:
SELECT s.student_id, last_name
FROM student_classes sc
INNER JOIN students s ON s.student_id = sc.student_id
WHERE sc.class_id = X
-- Getting all classes for a student:
SELECT c.class_id, name
FROM student_classes sc
INNER JOIN classes c ON c.class_id = sc.class_id
WHERE sc.student_id = Y
student
заданному address
.
Пример немного странный для меня. Итак, у одного ученика не может быть много адресов? На самом деле это возможно. Я думаю, что пример реального мира для трех типов отношений, согласно статье, которую я написал, выглядит следующим образом:
1:1
Отношения взаимно однозначны тогда и только тогда, когда Одна запись из таблицы А связана с максимум одной записи в таблице B.
Чтобы установить отношения "один к одному", первичный ключ таблицы B (без сиротской записи) должно быть вторичный ключ таблицы A (с орфографическими отчетами)
Пример:
Create table Gov(GID number(6) primary key,
Name varchar2(25), Address VarCHAR2(30),
Term_begin date,Term_end Date);
Create table State(SID number(3) primary key,
State_name varchar2(15), Population number(10),
SGID Number(4) references GOV(GID),
CONSTRAINT GOV_SDID UNIQUE (SGID));
insert into gov(GID, Name, Address, term_begin)
values(110, 'Bob', '123 any st', '1-Jan-2009');
insert into state values(111, 'Virginia',
2000000, 110);
1: M
Отношение является одним для многих, если и только если одна запись из таблицы А связанных с одним или несколькими таблицу B. Но одна запись в таблице B не может быть связана к более одной записи в таблице А.
Чтобы установить отношение "один ко многим", первичный ключ таблицы A (одна таблица) должна быть вторичной ключ таблицы B (много таблиц).
create table vendor1 ( vendor_no number(4) primary key,
name varchar2(20), address varchar2(20), city varchar2(15), st varchar2(2), zip varchar2(10), contact varchar2(16), phone_no varchar2(12), status varchar2(8),
stamp_date date);
create table inventory1 ( item varchar2(6) primary key,
description varchar2(30), quantity_on_hand number(4) not null,
vendor_no number(2) references vendor1(vendor_no),
reorder_qty number(3) not null );
Отношение - это много для многих, если и только если одна запись из таблицы А связанных с одной или несколькими записями в таблицу B и наоборот.
Чтобы установить отношение "Множество к многим", Создайте третью таблицу под названием "Отношение" которые будут иметь первичные ключи как таблицы A, так и B.
Create table Class (ClsID varchar2(10) primary Key,
title Varchar2(30),
Instructor Varchar2(30),
Day Varchar2(15),
time Varchar2(10));
Create table Student (StudID varchar2(15) primary Key,
Name Varchar2(35),
Major Varchar2(35),
Classyr Varchar2(10),
Status Varchar2(10));
Create table Stud_class (studid Varchar2 (15) not null,
ClsId varchar2 (14) not null,
Foreign key (Studid) references Student(Studid),
Foreign key (ClsId) references Class(ClsID),
UNIQUE (Studid,ClsID));
Отношения один к одному (1-1): Это отношения между основным и внешним ключами (первичный ключ, относящийся к внешнему ключу, только одна запись). это отношения один к одному.
Отношения "один-много" (1-М): Это также взаимосвязь между отношениями первичных и внешних ключей, но здесь первичный ключ, относящийся к нескольким записям (т.е. В таблице А есть информация о книге, а в таблице B - несколько издателей одной книги).
Многие для многих (M-M):. Многие из них включают в себя два измерения, полностью объясненные ниже с образцом.
-- This table will hold our phone calls.
CREATE TABLE dbo.PhoneCalls
(
ID INT IDENTITY(1, 1) NOT NULL,
CallTime DATETIME NOT NULL DEFAULT GETDATE(),
CallerPhoneNumber CHAR(10) NOT NULL
)
-- This table will hold our "tickets" (or cases).
CREATE TABLE dbo.Tickets
(
ID INT IDENTITY(1, 1) NOT NULL,
CreatedTime DATETIME NOT NULL DEFAULT GETDATE(),
Subject VARCHAR(250) NOT NULL,
Notes VARCHAR(8000) NOT NULL,
Completed BIT NOT NULL DEFAULT 0
)
-- This table will link a phone call with a ticket.
CREATE TABLE dbo.PhoneCalls_Tickets
(
PhoneCallID INT NOT NULL,
TicketID INT NOT NULL
)