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

Perbedaan Antara Batasan Inline dan Out-of-Line

Batasan pada tabel dan kolom memungkinkan Anda untuk menerapkan kualitas data. Dalam SQL, ada dua cara untuk membuat batasan pada tabel:sebaris dan keluar dari jalur .

Dalam artikel ini, saya akan mengeksplorasi kendala tersebut dan kelebihannya, serta menjelaskan mana yang saya rekomendasikan dan alasannya.

Apa itu Batasan Sebaris?

Batasan inline adalah batasan yang Anda nyatakan pada baris yang sama dengan kolom saat membuat tabel.

CREATE TABLE karyawan (emp_id NUMBER(10) PRIMARY KEY,first_name VARCHAR2(200),last_name VARCHAR2(200),dept_id NUMBER(10));

Dalam contoh ini, kata PRIMARY KEY setelah kolom emp_id menunjukkan bahwa emp_id adalah primary key.

Jadi, kami telah membuat batasan kunci utama pada kolom ini dengan menambahkan kata kunci. Konsepnya sama terlepas dari jenis batasannya.

Apa yang dimaksud dengan Batasan Out-of-Line?

Batasan out-of-line adalah batasan yang dideklarasikan pada baris terpisah untuk kolom. Kami menambahkannya di akhir pernyataan CREATE TABLE.

Misalnya, kami memiliki skrip berikut:

CREATE TABLE karyawan (emp_id NUMBER(10),first_name VARCHAR2(200),last_name VARCHAR2(200),dept_id NUMBER(10),CONSTRAINT pk_emp PRIMARY KEY (emp_id));

Seperti yang Anda lihat, kami menetapkan batasan PRIMARY KEY, yang disebut pk_emp , ke kolom emp_id di akhir pernyataan.

Konsep ini bekerja dengan cara yang sama terlepas dari jenis batasannya.

Sekarang, mari kita menganalisis perbedaan antara kedua jenis batasan ini, selain di mana mereka dideklarasikan.

Konstrain Out-of-Line Dapat Memiliki Nama yang Ditentukan

Saat membuat batasan out-of-line, kita dapat menentukan nama. Meskipun ini mungkin tampak membuang-buang waktu, ini bisa membantu.

Pertimbangkan ini pada contoh tertentu:

CREATE TABLE karyawan (emp_id NUMBER(10),nama_depan VARCHAR2(200),nama_belakang VARCHAR2(200),dept_id NUMBER(10),CONSTRAINT pk_emp PRIMARY KEY (emp_id),CONSTRAINT fk_emp_deptid FOREIGN KEY (dept_id) REFERENCES ),KATASI ck_emp_lnlen CHECK (PANJANG(nama_belakang)> 3));

Kami telah menetapkan nama berikut untuk beberapa batasan:

  • pk_emp
  • fk_emp_deptid
  • ck_emp_lnlen

Tampaknya itu hanya pengetikan yang tidak perlu, tetapi sebenarnya tidak. Kami akan melihat lebih dekat ini.

Jadi, mengapa kita perlu menetapkan nama untuk sebuah batasan?

Memiliki batasan bernama dapat membantu dalam beberapa situasi. Tanpa menentukan nama, Oracle secara otomatis menghasilkan nama untuk kendala yang dilakukannya untuk semua kendala inline. Biasanya, nama ini tidak memberikan informasi yang berguna.

Ketika Anda mendapatkan kesalahan dalam pernyataan SQL, kode PL/SQL, atau kode aplikasi, adalah ide yang baik untuk menggunakan nama kendala dan mengetahui apa yang dirujuk atau setidaknya menebak. Nama-nama seperti pk_emp atau ck_emp_lnlen akan lebih deskriptif daripada EMP1290894FH generik nama.

Juga, saat meninjau rencana eksekusi, nama kendala sering digunakan dalam output, yang membuatnya lebih mudah untuk mengetahui bagaimana rencana dieksekusi. Terutama, ketika kita memiliki kasus yang menentukan apakah kunci utama atau kunci asing sedang digunakan.

Kendala NOT NULL Hanya Dapat Dideklarasikan Sebaris

Hanya ada satu jenis batasan yang dapat dideklarasikan sebagai batasan sebaris. Ini adalah batasan NOT NULL.

Artinya, Anda tidak dapat mendeklarasikannya sebagai di luar batas.

Jalankan kode berikut:

CREATE TABLE karyawan (emp_id NUMBER(10),first_name VARCHAR2(200),last_name VARCHAR2(200) NOT NULL,dept_id NUMBER(10));

Namun, saat menjalankan kode di bawah ini, kita dapat melihat bahwa kode tersebut tidak berfungsi:

CREATE TABLE karyawan (emp_id NUMBER(10),first_name VARCHAR2(200),last_name VARCHAR2(200),dept_id NUMBER(10),CONSTRAINT nn_emp_ln NOT NULL (last_name));

Singkatnya, untuk batasan NOT NULL, kita harus mendeklarasikannya sebaris.

PERIKSA Batasan Dapat Mengacu pada Beberapa Kolom

Jika Anda membuat batasan PERIKSA sebaris, batasan tersebut hanya dapat merujuk ke kolom tempat pembuatannya.

Namun, jika Anda membuat batasan CHECK sebagai keluar dari baris, itu bisa merujuk ke beberapa kolom.

Buat karyawan tabel dengan batasan CHECK seperti yang ditunjukkan di bawah ini:

CREATE TABLE karyawan (emp_id NUMBER(10),first_name VARCHAR2(200) CHECK (LENGTH(first_name)> 10),last_name VARCHAR2(200),dept_id NUMBER(10));

Batasan ini menunjukkan bahwa first_name harus melebihi 10 karakter.

Namun, bagaimana jika kita ingin menetapkan bahwa kombinasi nama depan dan nama belakang harus lebih dari 10 karakter?

Untuk melakukannya, tulis ulang kode sebagai batasan out-of-line:

CREATE TABLE employee (emp_id NUMBER(10),first_name VARCHAR2(200),,last_name VARCHAR2(200),dept_id NUMBER(10),CONSTRAINT ck_fullname_len CHECK (LENGTH(first_name || last_name)> 10)); 

Kita dapat melihat bahwa aturan ini hanya dapat diimplementasikan dengan batasan out-of-line.

Metode yang Disarankan

Setelah menganalisis kedua metode:inline atau out of line, saya sarankan menggunakan batasan out-of-line.

Ada beberapa alasan untuk ini.

Pertama, Anda dapat menentukan nama untuk batasan Anda dan melihatnya dalam pesan kesalahan dan rencana eksekusi internal. Ini juga dapat membantu dengan menonaktifkan dan mengaktifkan batasan.

Kedua, periksa batasan memungkinkan Anda untuk merujuk ke beberapa kolom dan satu kolom. Jadi, lebih fleksibel jika Anda menambahkannya sebagai batasan di luar garis.

Terakhir, semua batasan yang dinyatakan keluar dari baris (kecuali NOT NULL yang hanya dapat didefinisikan sebagai batasan inline) memudahkan untuk melihat sintaks CREATE TABLE Anda dan melihat semua batasan Anda di satu tempat. Ini penting terutama dalam kasus ketika ada tabel besar dengan banyak kendala.

Sebagai kesimpulan, Anda dapat membuat batasan menggunakan dua metode berbeda:inline dan out of line. Saya sarankan menggunakan metode out-of-line jika Anda bisa, karena ada lebih banyak fleksibilitas, dan menetapkan nama ke batasan, sehingga menyederhanakan analisis rencana eksekusi Anda dan informasi SQL lainnya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengantar Basis Data Deret Waktu

  2. Mengapa Statistik Tunggu Saja Tidak Cukup

  3. Hash Bergabung di Kolom Nullable

  4. SQL Terpotong

  5. Cara Menghapus Revisi Postingan menggunakan WP-CLI