Comment implémenter des relations un à un, un à plusieurs et plusieurs à plusieurs lors de la conception de tables?

Quelqu’un peut-il expliquer comment mettre en œuvre des relations un à un, un à plusieurs et plusieurs à plusieurs tout en concevant des tableaux avec des exemples?

One-to-one: utilisez une clé étrangère dans la table référencée:

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 

Un-à-plusieurs : utilisez une clé étrangère sur les nombreux côtés de la relation pour revenir au “un” côté:

 teachers: teacher_id, first_name, last_name # the "one" side classes: class_id, class_name, teacher_id # the "many" side 

Plusieurs à plusieurs : utilisez une table de jonction ( exemple ):

 student: student_id, first_name, last_name classes: class_id, name, teacher_id student_classes: class_id, student_id # the junction table 

Exemple de requêtes:

  -- 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 

Voici quelques exemples concrets pour les types de relations:

1: 1

Une relation est une à un si et seulement si un enregistrement de la table A est lié à un maximum d’un enregistrement dans une table B.

Pour établir une relation un à un, la clé primaire de la table B (sans enregistrement orphelin) doit être la clé secondaire de la table A (avec les enregistrements orphelins).

Par exemple:

 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

Une relation est une à plusieurs si et seulement si un enregistrement de la table A est lié à un ou plusieurs enregistrements de la table B. Cependant, un enregistrement de la table B ne peut pas être associé à plusieurs enregistrements de la table A.

Pour établir une relation un à plusieurs, la clé primaire de la table A (la table “one”) doit être la clé secondaire de la table B (la table “many”).

Par exemple:

 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

Une relation est plusieurs à plusieurs si et seulement si un enregistrement de la table A est lié à un ou plusieurs enregistrements de la table B et inversement.

Pour établir une relation plusieurs-à-plusieurs, créez une troisième table appelée “ClassStudentRelation” qui aura les clés primaires des tables A et 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) ); 

Relation un à un (1-1): il s’agit de la relation entre la clé primaire et la clé étrangère (la clé primaire relative à la clé étrangère n’a qu’un enregistrement). c’est une relation un à un.

Relation un à un (1-M): Il s’agit également de la relation entre les relations de clés primaires et étrangères, mais ici la clé primaire relative à plusieurs enregistrements (le tableau A contient des informations de livre et le tableau B plusieurs éditeurs).

Plusieurs à plusieurs: MM à plusieurs comprend deux dimensions, expliquées en détail ci-dessous avec l’échantillon.

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