Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Merancang hubungan 1:1 dan 1:m di SQL Server

Hubungan apa pun mengharuskan tabel "induk" (satu sisi) memiliki Kunci Utama (atau unik) (PK), yang secara unik mengidentifikasi setiap baris, dan tabel "anak" (sisi lain) memiliki kolom atau kolom Kunci Asing , yang harus diisi dengan nilai yang sama dengan beberapa nilai yang ada dari Kunci Utama di tabel induk. Jika ingin hubungan one to many (1-M) maka Foreign Key harus berupa atribut biasa (kolom atau kolom) pada tabel anak yang dapat diulang (bisa banyak baris dengan nilai yang sama)

Jika Anda menginginkan hubungan satu ke satu (1-1) maka kunci Asing itu sendiri harus menjadi Kunci Utama atau indeks unik di tabel anak yang menjamin bahwa mungkin ada paling banyak satu baris di tabel anak dengan nilai itu.

Hubungan 1-1 secara efektif mempartisi atribut (kolom) dalam sebuah tabel menjadi dua tabel. Ini disebut segmentasi vertikal. Ini sering dilakukan untuk sub-kelas entitas tabel, atau, untuk alasan lain, jika pola penggunaan pada kolom dalam tabel menunjukkan bahwa beberapa kolom perlu diakses secara signifikan lebih sering daripada kolom lainnya. (Katakanlah satu atau dua kolom akan diakses 1000 kali per detik dan 40 kolom lainnya hanya akan diakses sebulan sekali). Mempartisi tabel dengan cara ini akan mengoptimalkan pola penyimpanan untuk dua kueri yang berbeda tersebut.

Sub-Kelas . Di atas sebenarnya menciptakan hubungan 1 ke nol atau satu, yang digunakan untuk apa yang disebut hubungan sub-kelas atau subtipe. Ini terjadi ketika Anda memiliki dua entitas berbeda yang berbagi banyak atribut, tetapi salah satu entitas memiliki atribut tambahan yang tidak diperlukan oleh entitas lainnya. Contoh yang baik adalah Karyawan , dan Pegawai Bergaji . Karyawan tabel akan memiliki semua atribut yang dibagikan oleh semua karyawan, dan Gaji Karyawan tabel akan ada dalam hubungan (1-0/1) dengan Karyawan, dengan atribut tambahan (Gaji , Liburan Tahunan , dll.) yang hanya dibutuhkan oleh karyawan bergaji.

Jika Anda benar-benar menginginkan hubungan 1-1, maka Anda harus menambahkan mekanisme lain untuk menjamin bahwa tabel anak akan selalu memiliki satu catatan untuk setiap catatan/baris di tabel induk. Umumnya satu-satunya cara untuk melakukan ini adalah dengan menerapkan ini dalam kode yang digunakan untuk memasukkan data (baik dalam pemicu, prosedur tersimpan atau kode di luar database). Ini karena jika Anda menambahkan batasan integritas referensial pada dua tabel yang mengharuskan baris selalu berada di keduanya, tidak mungkin menambahkan baris ke salah satu tanpa melanggar salah satu batasan, dan Anda tidak dapat menambahkan baris ke keduanya tabel secara bersamaan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Potong Tabel Dalam Transaksi

  2. Bantuan cepat menggunakan RANK pada banyak variabel

  3. Baris ke nilai yang dipisahkan koma menggunakan tag XML

  4. Transaksi Terdistribusi pada Server Tertaut antara sql server dan mysql

  5. HAS_DBACCESS() – Temukan apakah Pengguna Dapat Mengakses Database di SQL Server