Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie implementiert man Eins-zu-eins-, Eins-zu-viele- und Viele-zu-viele-Beziehungen beim Entwerfen von Tabellen?

Eins-zu-Eins: Verwenden Sie einen Fremdschlüssel für die referenzierte Tabelle:

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

Sie müssen auch eine eindeutige Einschränkung für die Fremdschlüsselspalte festlegen (addess.student_id ), um mehrere Zeilen in der untergeordneten Tabelle (address ) sich nicht auf dieselbe Zeile in der referenzierten Tabelle (student) beziehen ).

Eins-zu-viele :Verwenden Sie einen Fremdschlüssel auf der Viele-Seite der Beziehung, der zurück zur "Eins"-Seite führt:

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

Many-to-Many :Verwenden Sie eine Junction-Tabelle (Beispiel):

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

Beispielabfragen:

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