Relationship

Relationship adalah hubungan antara dua atau lebih tabel dalam sebuah database. Relationship ini penting untuk mengelola data yang tersebar di beberapa tabel dan memungkinkan integrasi informasi secara efisien.

Jenis-Jenis Relationship:

  • One-to-One:

    • Setiap baris dalam tabel A berhubungan dengan satu baris dalam tabel B.

    • Contoh: Tabel users dengan tabel user_profiles, di mana setiap pengguna hanya memiliki satu profil.

    CREATE TABLE users (
        user_id INT PRIMARY KEY,
        username VARCHAR(50)
    );
    
    CREATE TABLE user_profiles (
        profile_id INT PRIMARY KEY,
        user_id INT,
        bio TEXT,
        FOREIGN KEY (user_id) REFERENCES users(user_id)
    );
    • Untuk menampilkan data antara dua tabel users dan user_profiles, kita bisa menggunakan SQL INNER JOIN, LEFT JOIN, atau RIGHT JOIN tergantung pada kebutuhan kita.

      Berikut ini adalah contoh menggunakan INNER JOIN, yang hanya akan menampilkan data jika ada kecocokan di kedua tabel:

      SELECT users.user_id, users.username, user_profiles.profile_id, user_profiles.bio
      FROM users
      INNER JOIN user_profiles ON users.user_id = user_profiles.user_id;

      Penjelasan:

      • INNER JOIN: Menggabungkan baris dari kedua tabel hanya jika ada kecocokan antara kolom user_id pada tabel users dengan kolom user_id pada tabel user_profiles.

      • Hasilnya: Query ini akan menampilkan data user_id, username, profile_id, dan bio dari kedua tabel yang memiliki user_id yang sama.

      Jika Anda ingin menampilkan semua pengguna, termasuk mereka yang tidak memiliki profil, Anda bisa menggunakan LEFT JOIN:

      SELECT users.user_id, users.username, user_profiles.profile_id, user_profiles.bio
      FROM users
      LEFT JOIN user_profiles ON users.user_id = user_profiles.user_id;

      Penjelasan:

      • LEFT JOIN: Mengambil semua data dari tabel users, dan data dari user_profiles yang cocok. Jika tidak ada kecocokan, kolom dari user_profiles akan berisi NULL.

  • One-to-Many :

    • Setiap baris dalam tabel A berhubungan dengan banyak baris dalam tabel B.

    • Contoh: Tabel authors dengan tabel books, di mana seorang penulis bisa menulis banyak buku.

    CREATE TABLE authors (
        author_id INT PRIMARY KEY,
        name VARCHAR(100)
    );
    
    CREATE TABLE books (
        book_id INT PRIMARY KEY,
        title VARCHAR(100),
        author_id INT,
        FOREIGN KEY (author_id) REFERENCES authors(author_id)
    );
    • Berikut adalah contoh query untuk melakukan join antara tabel authors dan books, menggunakan INNER JOIN:

      SELECT authors.author_id, authors.name, books.book_id, books.title
      FROM authors
      INNER JOIN books ON authors.author_id = books.author_id;

      Penjelasan:

      • INNER JOIN: Menggabungkan baris dari kedua tabel hanya jika ada kecocokan antara kolom author_id pada tabel authors dengan kolom author_id pada tabel books.

      • Hasilnya: Query ini akan menampilkan data author_id, name, book_id, dan title dari kedua tabel yang memiliki author_id yang sama.

      Jika Anda ingin menampilkan semua penulis, termasuk mereka yang belum menulis buku, Anda bisa menggunakan LEFT JOIN:

      SELECT authors.author_id, authors.name, books.book_id, books.title
      FROM authors
      LEFT JOIN books ON authors.author_id = books.author_id;

      Penjelasan:

      • LEFT JOIN: Mengambil semua data dari tabel authors, dan data dari books yang cocok. Jika tidak ada kecocokan, kolom dari books akan berisi NULL.

      Sebaliknya, jika Anda ingin menampilkan semua buku, termasuk yang tidak memiliki penulis terkait (mungkin karena penulisnya dihapus), Anda bisa menggunakan RIGHT JOIN:

      SELECT authors.author_id, authors.name, books.book_id, books.title
      FROM authors
      RIGHT JOIN books ON authors.author_id = books.author_id;

      Penjelasan:

      • RIGHT JOIN: Mengambil semua data dari tabel books, dan data dari authors yang cocok. Jika tidak ada kecocokan, kolom dari authors akan berisi NULL.

  • Many-to-Many:

    • Banyak baris dalam tabel A berhubungan dengan banyak baris dalam tabel B.

    • Contoh: Tabel students dengan tabel courses, di mana seorang siswa bisa mengambil banyak kursus, dan satu kursus bisa diikuti oleh banyak siswa. Ini biasanya diimplementasikan dengan tabel ketiga (tabel penghubung).

    CREATE TABLE students (
        student_id INT PRIMARY KEY,
        name VARCHAR(100)
    );
    
    CREATE TABLE courses (
        course_id INT PRIMARY KEY,
        course_name VARCHAR(100)
    );
    
    CREATE TABLE student_courses (
        student_id INT,
        course_id INT,
        FOREIGN KEY (student_id) REFERENCES students(student_id),
        FOREIGN KEY (course_id) REFERENCES courses(course_id),
        PRIMARY KEY (student_id, course_id)
    );
  • Berikut adalah contoh query untuk melakukan join antara tabel students, courses, dan student_courses, untuk menampilkan informasi mengenai siswa dan kursus yang mereka ikuti:

    • Menggunakan INNER JOIN

      Query ini akan menampilkan semua siswa yang terdaftar dalam kursus tertentu:

      SELECT students.student_id, students.name, courses.course_id, courses.course_name
      FROM students
      INNER JOIN student_courses ON students.student_id = student_courses.student_id
      INNER JOIN courses ON student_courses.course_id = courses.course_id;

      Penjelasan:

      • INNER JOIN digunakan untuk menggabungkan tabel students dengan student_courses, kemudian menggabungkannya dengan tabel courses.

        • Query ini menampilkan data student_id, name, course_id, dan course_name untuk semua siswa yang telah terdaftar dalam kursus.

    • Menggunakan LEFT JOIN

      Jika Anda ingin menampilkan semua siswa, termasuk mereka yang belum terdaftar dalam kursus apa pun, Anda bisa menggunakan LEFT JOIN:

      SELECT students.student_id, students.name, courses.course_id, courses.course_name
      FROM students
      LEFT JOIN student_courses ON students.student_id = student_courses.student_id
      LEFT JOIN courses ON student_courses.course_id = courses.course_id;

      Penjelasan:

      • LEFT JOIN memastikan bahwa semua siswa akan ditampilkan, bahkan jika mereka belum terdaftar dalam kursus. Jika seorang siswa belum terdaftar dalam kursus, kolom yang terkait dengan kursus akan berisi NULL.

    • Menggunakan RIGHT JOIN

      Sebaliknya, jika Anda ingin menampilkan semua kursus, termasuk kursus yang belum diambil oleh siswa mana pun, Anda bisa menggunakan RIGHT JOIN:

      SELECT students.student_id, students.name, courses.course_id, courses.course_name
      FROM students
      RIGHT JOIN student_courses ON students.student_id = student_courses.student_id
      RIGHT JOIN courses ON student_courses.course_id = courses.course_id;

      Penjelasan:

      • RIGHT JOIN memastikan bahwa semua kursus akan ditampilkan, bahkan jika tidak ada siswa yang terdaftar dalam kursus tersebut. Jika tidak ada siswa yang terdaftar, kolom yang terkait dengan siswa akan berisi NULL.

Dengan memahami jenis-jenis relationship ini, kita bisa merancang database yang lebih terstruktur dan efisien dalam mengelola data yang saling berhubungan.

Last updated