Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Cara Membuat Tabel dengan Beberapa Kunci Asing dan Tidak Bingung

Memahami Hubungan Tabel

SQL server menambahkan kunci asing untuk mengimplementasikan hubungan antar tabel dalam database relasional. Sebuah tabel dapat memiliki relasi satu-ke-satu, satu-ke-banyak, atau banyak-ke-banyak dengan tabel lain, bergantung pada tipe data yang ingin Anda simpan.

Hubungan satu-ke-satu sederhana dan jarang digunakan. Setiap record dalam tabel tertentu berhubungan dengan tepat satu record di tabel lain.

Misalnya, Anda dapat menyimpan nama pengguna, id, dan jenis kelamin dalam satu tabel (Pengguna tabel) dan alamatnya akan disimpan di tabel yang berbeda (Alamat meja). Setiap catatan di Pengguna tabel akan sesuai dengan satu catatan di Alamat meja. Sebaliknya, setiap alamat di Alamat tabel akan menjadi milik hanya satu catatan di Pengguna tabel.

Hubungan satu-ke-banyak dan banyak-ke-banyak jauh lebih sering terjadi.

Pertimbangkan skenario di mana Anda menyimpan informasi tentang karyawan organisasi, departemen, perusahaan asuransi karyawan, dan alamat kantor karyawan.

Kami berasumsi bahwa seorang karyawan hanya dapat menjadi anggota satu departemen dan hanya dapat berlangganan ke satu perusahaan asuransi. Namun, departemen dan perusahaan asuransi dapat memiliki banyak karyawan. Departemen dan Karyawan tabel akan memiliki hubungan satu-ke-banyak. Demikian pula, Asuransi dan tabel Karyawan akan memiliki hubungan satu-ke-banyak.

Juga, organisasi mungkin memiliki beberapa kantor, dan seorang karyawan dapat bekerja di lebih dari satu kantor. Selain itu, sebuah kantor dapat memiliki banyak karyawan. Dalam hal ini, Kantor dan Karyawan tabel akan memiliki hubungan banyak ke banyak.

Untuk menerapkan hubungan banyak ke banyak, Anda perlu membuat tabel pencarian yang menghubungkan dua tabel dalam hubungan banyak ke banyak. Tabel asli berisi hubungan satu-ke-banyak dengan tabel pencarian.

Mari pertimbangkan untuk membuat hubungan banyak-ke-banyak antara Karyawan dan Kantor tabel. Anda akan membuat tabel pencarian baru Kantor_Karyawan . Kemudian Anda membuat hubungan satu-ke-banyak antara Karyawan dan Kantor_Karyawan tabel dan Kantor dan Kantor_Karyawan tabel.

Sekarang mari kita lihat bagaimana kunci asing cocok dalam diskusi ini.

Apa itu Kunci Asing dan Mengapa Anda Membutuhkan Beberapa Kunci Asing?

Dalam database relasional, kunci asing mengimplementasikan berbagai jenis hubungan database.

Misalnya, untuk menerapkan hubungan satu ke banyak di SQL Server, Anda perlu menambahkan kunci asing dalam tabel yang ada di banyak sisi hubungan satu-ke-banyak.

Kunci asing mereferensikan kunci utama atau kunci identitas unik dari tabel yang ada di satu sisi meja. Oleh karena itu, dalam hubungan satu-ke-banyak antara Departemen dan Karyawan tabel yang kita bahas di atas, Karyawan tabel akan menyimpan kunci asing yang mereferensikan kunci utama Departemen tabel.

Dalam skenario di mana tabel dapat memiliki hubungan dengan beberapa tabel lain, Anda perlu menambahkan beberapa kunci asing ke tabel. Untuk Karyawan tabel, Anda perlu menambahkan kunci asing yang mereferensikan kunci utama Departemen tabel dan Asuransi meja. Demikian pula, Kantor_Karyawan tabel pencarian akan memiliki dua kunci asing yang mereferensikan kunci utama Karyawan dan Kantor tabel.

Menambahkan Beberapa Kunci Asing dengan SQL Server

Diagram berikut menunjukkan skema database yang akan Anda terapkan untuk contoh sederhana kami:

Di sini Anda dapat melihat bahwa database memiliki lima tabel:Karyawan , Asuransi , Departemen , Kantor , dan Kantor_Karyawan .

Departemen dan Karyawan tabel memiliki hubungan satu ke banyak. Demikian pula, Asuransi dan Karyawan tabel juga memiliki hubungan satu ke banyak. Kantor dan tabel Karyawan memiliki hubungan banyak-ke-banyak yang diimplementasikan menggunakan dua hubungan satu-ke-banyak dengan Kantor_Karyawan tabel pencarian.

Karyawan tabel memiliki dua kunci asing, Dep_Id , dan Id_Asuransi yang merujuk ke kunci utama (Id) Departemen dan Asuransi tabel, masing-masing.

Sekarang mari kita jalankan Skrip SQL yang membuat database yang dijelaskan.

Mulailah dengan membuat tabel tanpa kunci asing. Jika Anda mencoba membuat tabel dengan kunci asing yang mereferensikan tabel lain yang belum dibuat, Anda akan mendapatkan kesalahan.

Dalam skema database kami, Departemen , Organisasi , dan Kantor tabel tidak memiliki kunci asing. Skrip berikut membuat database dummy bernama Organisasi dan menambahkan tiga tabel di dalamnya:Departemen , Asuransi , dan Kantor .

CREATE DATABASE Organization

USE Organization
CREATE TABLE Department
(
Id INT PRIMARY KEY,
Name VARCHAR (50) NOT NULL
)

USE Organization
CREATE TABLE Insurance
(
Id INT PRIMARY KEY,
Name VARCHAR (50) NOT NULL
)

USE Organization
CREATE TABLE Office
(
Id INT PRIMARY KEY,
Name VARCHAR (50) NOT NULL
)

Anda dapat menggunakan REFERENSI KUNCI ASING kendala untuk menerapkan hubungan kunci asing di SQL Server. Tentukan nama tabel. Kemudian tentukan dalam tanda kurung nama kolom untuk kunci asing sebagai referensi.

Skrip berikut membuat Karyawan tabel dengan kunci asing Dep_Id dan Id_Insur kolom Id referensi di Departemen dan Asuransi tabel masing-masing.

USE Organization
CREATE TABLE Employee
(
Id INT PRIMARY KEY IDENTITY(1,1),
Name VARCHAR (50) NOT NULL,
Age INT,
Gender VARCHAR (50),
Dep_Id int FOREIGN KEY REFERENCES Department(Id),
Insur_Id int FOREIGN KEY REFERENCES Insurance(Id)
)

Terakhir, skrip berikut membuat Kantor_Karyawan tabel dengan dua kunci asing Emp_Id dan Id_Kantor .

USE Organization
CREATE TABLE Employee_Office
(
Id INT PRIMARY KEY IDENTITY(1,1),
Emp_Id int FOREIGN KEY REFERENCES Employee(Id),
Office_Id int FOREIGN KEY REFERENCES Office(Id)
)

Memasukkan Record dalam Tabel dengan Beberapa Kunci Asing

Untuk menyisipkan catatan ke dalam tabel dengan beberapa kunci asing, Anda harus terlebih dahulu membuat catatan yang sesuai di tabel yang direferensikan oleh kunci asing di tabel asli.

Dalam praktiknya, untuk memasukkan catatan ke dalam Karyawan tabel, pertama-tama kita harus membuat catatan yang sesuai di Departemen dan Asuransi tabel. Itu karena Karyawan tabel berisi kunci asing yang merujuk ke Departemen dan Asuransi tabel.

Pertama, kami mencoba menambahkan catatan ke Karyawan tabel tanpa menentukan kunci asing yang merujuk ke Departemen dan Karyawan tabel.

INSERT INTO Employee
VALUES ('James', 10, 'Male'),
('Sara', 7, 'Female')

Anda akan melihat kesalahan berikut. Hal ini terjadi karena jumlah nilai yang ditentukan tidak sesuai dengan jumlah kolom di Karyawan tabel.

Mari kita coba menambahkan beberapa nilai dummy untuk Dep_Id dan Id_Insur kolom (kunci asing):

INSERT INTO Employee
VALUES ('James', 10, 'Male', 2, 2),
('Sara', 7, 'Female', 1, 1)

Anda akan melihat kesalahan berikut karena tabel Departemen dan Asuransi tidak memiliki catatan masing-masing dengan id 2 dan 1.

Sekarang mari kita masukkan catatan ke Departemen , Asuransi , dan Kantor tabel:

INSERT INTO Department
VALUES (1, 'Finance'),
(2, 'HR')

INSERT INTO Insurance
VALUES (1, 'Company A'),
(2, 'Company B')

INSERT INTO Office
VALUES (1, 'Paris'),
(2, 'London')

Sejak Departemen dan Asuransi tabel sekarang memiliki catatan dengan Id 2 dan 1, Anda dapat memasukkan catatan ke Karyawan tabel dengan nilai kunci asing yang sesuai seperti yang ditunjukkan di bawah ini:

INSERT INTO Employee
VALUES ('James', 10, 'Male', 2, 2),
('Sara', 7, 'Female', 1, 1)

Masukkan beberapa catatan ke Kantor_Karyawan meja. Namun sebelumnya mari kita lihat nilai kolom Id pada tabel Employee :

SELECT * FROM Employee

Karyawan kolom berisi catatan dengan nilai Id 2 dan 3. Anda dapat menyisipkan catatan ke Kantor_Karyawan tabel tempat Emp_Id kolom berisi 2 atau 3, dan Office_Id kolom berisi 1 atau 2.

INSERT INTO Employee_Office
VALUES (2, 1),
(2, 2),
(3,2)

Memilih Record dari Tabel dengan Beberapa Kunci Asing

Untuk memilih catatan dari tabel dengan Beberapa kunci asing, Anda perlu BERGABUNG.

Skrip berikut mengembalikan nilai Nama dan Jenis Kelamin kolom dari Karyawan tabel dan Nama kolom dari Departemen dan tabel Asuransi. Sejak Karyawan tabel berisi dua kunci asing, Anda harus menggunakan dua LEFT JOIN pernyataan:

SELECT 
Employee.Name AS Employee_Name, 
Employee.Gender, 
Department.Name as Department_Name, 
Insurance.Name as Insurance

FROM Employee
LEFT JOIN Department ON Employee.Dep_Id  =  Department.Id
LEFT JOIN Insurance  ON Employee.Insur_Id = Insurance.Id

Dengan cara yang sama, Anda dapat memilih nilai Nama dan Jenis Kelamin kolom dari Karyawan tabel dan Nama kolom dari Kantor tabel menggunakan dua pernyataan LEFT JOIN pada tabel pencarian Kantor_Karyawan .

SELECT 
Employee.Name AS Employee_Name, 
Employee.Gender, 
Office.Name as Office_Name

FROM Employee
LEFT JOIN Employee_Office ON Employee.Id  =  Employee_Office.Emp_Id
LEFT JOIN Office  ON Office.Id = Employee_Office.Office_Id

HAPUS Catatan dari Tabel dengan Beberapa Kunci Asing

Anda dapat menghapus catatan dari tabel dengan beberapa kunci asing. Namun, pastikan bahwa tabel tidak direferensikan oleh kunci asing di kolom lain.

Misalnya, Anda tidak boleh menghapus catatan dari Departemen tabel yang direferensikan oleh Emp_Id kunci asing di Karyawan meja. Ini contohnya:

DELETE FROM Department WHERE Id = 1

Sejak catatan dengan Id 1 di Departemen tabel direferensikan oleh Emp_Id kolom di Karyawan tabel, Anda tidak dapat menghapusnya seperti yang disebutkan dalam kesalahan di atas. Pertama, Anda harus menghapus semua catatan dari Karyawan tabel di mana Emp_Id adalah 1.

Tabel Karyawan hanya berisi 1 catatan tersebut (dengan nilai Id 3). Mari kita coba untuk menghapus record tersebut dengan query berikut:

DELETE FROM Employee WHERE Id = 3

Anda akan melihat kesalahan yang terjadi karena Kantor_Karyawan berisi catatan di mana Emp_Id kolom kunci asing berisi 3 catatan. Karenanya Anda harus menghapus catatan itu terlebih dahulu:

Skrip berikut menghapus catatan dengan Emp_Id nilai 3 dari Kantor_Karyawan tabel.

DELETE FROM Employee_Office WHERE Emp_Id = 3

Terakhir, skrip berikut menghapus catatan dengan nilai Id 1 dari Karyawan dan Departemen kolom.

DELETE FROM Employee WHERE Id = 1
DELETE FROM Department WHERE Id = 1

Kesimpulan

Jadi, kami telah memeriksa menambahkan beberapa kunci asing di tabel SQL Server menggunakan kueri SQL untuk menambahkan kunci asing. Semoga contoh-contoh praktis yang digunakan dalam artikel ini juga membantu Anda menguasai topik ini.

Ketika Anda berurusan dengan kunci asing dan dependensi tabel untuk melakukan tugas kerja, juga berguna untuk menggunakan perangkat lunak untuk menyederhanakan rutinitas. Sangat direkomendasikan adalah Visual Database Diagram sebagai solusi khusus untuk melihat semua dependensi antar tabel. Selain itu, Anda dapat membuat dokumentasi yang tepat untuk seluruh database, apa pun kerumitannya dengan fitur Database Documenter.

Kedua alat ini bertujuan untuk mengurangi beban manual, mengotomatiskan proses, dan mempercepat kinerja untuk mengurangi beban Anda.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengidentifikasi dan Memperbaiki Masalah Performa Catatan yang Diteruskan

  2. Menggunakan Tabel Konfigurasi untuk Menentukan Alur Kerja yang Sebenarnya

  3. Notasi Kaki Gagak

  4. Pesanan Bersyarat Oleh

  5. Bergabunglah dengan 3 Tabel di SQL