sql >> Databáze >  >> RDS >> Oracle

Jak implementovat vztahy one-to-one, one-to-many a many-to-many při navrhování tabulek?

Jedna ku jedné: Použijte cizí klíč k odkazované tabulce:

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

Musíte také umístit jedinečné omezení na sloupec cizího klíče (addess.student_id ), abyste zabránili více řádkům v podřízené tabulce (address ) ze stejného řádku v odkazované tabulce (student ).

Jedna k mnoha :Použijte cizí klíč na mnohostranné straně vztahu, která odkazuje zpět na stranu „jedné“:

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

Mnoho k mnoha :Použijte spojovací tabulku (příklad):

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

Příklady dotazů:

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



  1. Jak funguje LOWER() v MariaDB

  2. Jaký je ekvivalent SQL Server APPLY v Oracle?

  3. Jak mohu získat výčet možných hodnot v databázi MySQL?

  4. Použití OAuth k ověření vašeho připojení ODBC k Salesforce.com