sql developer - Come implementare relazioni one-to-one, one-to-many e many-to-many durante la progettazione di tabelle?




2 Answers

Uno a uno: utilizzare una chiave esterna per la tabella di riferimento:

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

Uno-a-molti : usa una chiave esterna sui molti lati della relazione che rimanda al lato "uno":

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

Molti-a-molti : utilizzare una tabella di giunzione ( example ):

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

Query di esempio:

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

schema visualize

Qualcuno può spiegare come implementare relazioni one-to-one, one-to-many e many-to-many durante la progettazione di tabelle con alcuni esempi?




Rapporto 1-1 (uno a uno): si tratta della relazione tra chiave primaria e chiave esterna (chiave primaria relativa a chiave esterna solo un record). questa è una relazione uno a uno.

Relazione da uno a molti (1-M): questa è anche la relazione tra relazioni primarie e chiavi esterne, ma qui la chiave primaria relativa a più record (ad esempio, la Tabella A ha informazioni sui libri e la Tabella B ha più editori di un libro).

Molti a molti (MM): Molti a molti include due dimensioni, spiegate completamente come di seguito con il campione.

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



Related