sql >> Database >  >> RDS >> Oracle

Hoe een-op-een, een-op-veel en veel-op-veel relaties te implementeren tijdens het ontwerpen van tabellen?

Een-op-een: Gebruik een externe sleutel voor de tabel waarnaar wordt verwezen:

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

Je moet ook een unieke beperking op de externe sleutelkolom zetten (addess.student_id ) om meerdere rijen in de onderliggende tabel te voorkomen (address ) die betrekking hebben op dezelfde rij in de tabel waarnaar wordt verwezen (student ).

Een-op-veel :Gebruik een externe sleutel aan de vele kant van de relatie die terug linkt naar de "één" kant:

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

Veel-op-veel :Gebruik een verbindingstabel (voorbeeld):

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

Voorbeeldvragen:

 -- 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. Script genereren om alle beperkingen voor externe sleutels in SQL Server-database in te schakelen - SQL Server / TSQL-zelfstudie, deel 78

  2. Tijd toevoegen aan een Datetime-waarde in MySQL

  3. Online schema-upgrade in MySQL Galera-cluster met behulp van de RSU-methode

  4. Hoe informatie te krijgen over compileerfouten in Oracle/TOAD