Apa kendala database? [Tutup]


92

Apa definisi yang jelas dari batasan database? Mengapa batasan penting untuk database? Apa saja jenis kendala tersebut?


12
Pertanyaan ini memiliki jawaban yang jelas. Ini tidak "terlalu luas". Jumlah suara positif dan favoritnya yang besar mengungkapkan betapa bergunanya hal itu bagi banyak orang. Saya telah membersihkan kata-katanya dan menominasikannya untuk dibuka kembali.
La-comadreja

@BasilBourque pertanyaan ini sangat tidak sesuai untuk Pemrogram - akan dengan cepat ditolak dan ditutup di sana, lihat meta.programmers.stackexchange.com/questions/6483/… Bacaan yang disarankan: Apa yang terjadi di Programmers.SE? Panduan untuk Stack Overflow
agas

1
@gnat Meskipun halaman itu membuat saya masih bingung tentang apa yang sedang atau tidak sesuai topik untuk Pemrogram Stack Exchange, saya dapat memahami dan setuju dengan batas minimum penulis posting setelah terlebih dahulu membaca artikel Wikipedia yang relevan secara langsung yang menyediakan jenis ikhtisar ringkas atau ringkasan yang sama yang diminta di Stack Exchange.
Basil Bourque

2
Judulnya terlalu luas, dan sub pertanyaan menanyakan banyak pertanyaan sekaligus -_- Bagaimana TomTom, P ரதீப், greg-449, bummi dan Nit menginginkannya? Tolong jelaskan. Apakah ada juga Anda dapat bertanya tentang kendala sama sekali ...?
Lealo

Meskipun saya memahami sentimen terhadap pertanyaan yang terlalu berbasis papan dan opini, saya tidak setuju dengan persyaratan untuk membaca artikel wikipedia terlebih dahulu. Ini TIDAK memberikan "jenis ringkasan atau ringkasan ringkasan yang sama". Jawaban yang diterima memberikan jawaban yang jauh lebih ringkas dan langsung daripada tautan wikipedia di atas.
Selamanya

Jawaban:


117

Batasan adalah bagian dari definisi skema database.

Batasan biasanya dikaitkan dengan tabel dan dibuat dengan pernyataan CREATE CONSTRAINTatau CREATE ASSERTIONSQL.

Mereka mendefinisikan properti tertentu yang harus dipatuhi oleh data dalam database. Mereka dapat diterapkan ke kolom, seluruh tabel, lebih dari satu tabel atau seluruh skema. Sistem database yang andal memastikan bahwa batasan berlaku setiap saat (kecuali mungkin di dalam transaksi, untuk apa yang disebut batasan yang ditangguhkan).

Jenis kendala yang umum adalah:

  • bukan null - setiap nilai dalam kolom tidak boleh NULL
  • unik - nilai di kolom tertentu harus unik untuk setiap baris dalam tabel
  • kunci utama - nilai dalam kolom tertentu harus unik untuk setiap baris dalam tabel dan bukan NULL ; biasanya setiap tabel dalam database harus memiliki kunci utama - ini digunakan untuk mengidentifikasi catatan individu
  • foreign key - nilai di kolom tertentu harus mereferensikan record yang ada di tabel lain (melalui primary key atau batasan unik lainnya )
  • check - ekspresi ditentukan, yang harus dievaluasi ke true agar batasan dipenuhi

3
1 untuk menyertakan PK, bukan null, null
gbn

+1, Anda masih dapat mengembangkan skenario KUNCI ASING dan memberikan beberapa tautan.
Unreason

2
Periksa Kendala tidak boleh bernilai salah. Mereka tidak harus benar. Tidak diketahui juga baik-baik saja.
Martin Smith

2
Bukankah batasan jenis juga merupakan jenis yang umum?
Martin

1
Meskipun kami biasanya tidak menyebutnya kendala, saya berpendapat bahwa tipe data adalah bentuk kendala. Jika saya mendefinisikan sesuatu sebagai Int atau datetime, itu membatasi jenis data yang bisa dimasukkan ke lapangan. Pemilihan tipe data yang tepat adalah bagian penting untuk memastikan integritas data.
HLGEM

36

Untuk memahami mengapa kita membutuhkan batasan, Anda harus terlebih dahulu memahami nilai integritas data.

Integritas Data mengacu pada validitas data. Apakah data Anda valid? Apakah data Anda mewakili untuk apa Anda merancangnya?

Pertanyaan aneh apa yang saya ajukan mungkin Anda pikirkan, tetapi sayangnya terlalu sering, database dipenuhi dengan data sampah, referensi yang tidak valid ke baris di tabel lain, yang sudah lama hilang ... dan nilai yang tidak berarti apa-apa bagi logika bisnis solusi Anda lagi.

Semua sampah ini tidak saja cenderung menurunkan kinerja Anda, tetapi juga merupakan bom waktu menurut logika aplikasi Anda yang pada akhirnya akan mengambil data yang tidak dirancang untuk dipahami.

Batasan adalah aturan yang Anda buat pada waktu desain yang melindungi data Anda agar tidak rusak. Sangat penting untuk kelangsungan hidup anak hati Anda yang lama dari solusi database. Tanpa kendala, solusi Anda pasti akan rusak seiring waktu dan penggunaan yang berat.

Anda harus mengakui bahwa mendesain desain database Anda hanyalah kelahiran solusi Anda. Di sini setelah itu harus hidup (semoga) untuk waktu yang lama, dan menanggung semua jenis perilaku (aneh) oleh pengguna akhir (mis. Aplikasi klien). Tetapi fase desain dalam pengembangan ini sangat penting untuk kesuksesan solusi Anda dalam waktu lama! Hormati, dan beri waktu serta perhatian yang dibutuhkannya.

Orang bijak pernah berkata: "Data harus melindungi dirinya sendiri!" . Dan inilah yang dilakukan kendala. Ini adalah aturan yang menjaga data dalam database Anda sevalid mungkin.

Ada banyak cara untuk melakukan ini, tetapi pada dasarnya intinya adalah:

  • Batasan kunci asing mungkin merupakan batasan yang paling sering digunakan, dan memastikan bahwa referensi ke tabel lain hanya diizinkan jika sebenarnya ada baris target yang menjadi referensi. Ini juga membuat tidak mungkin untuk memutuskan hubungan seperti itu dengan menghapus baris yang direferensikan membuat tautan mati.
  • Periksa kendala dapat memastikan bahwa hanya nilai tertentu yang diperbolehkan dalam kolom tertentu. Anda dapat membuat batasan hanya dengan mengizinkan kata 'Kuning' atau 'Biru' di kolom VARCHAR. Semua nilai lainnya akan menghasilkan kesalahan. Dapatkan ide untuk penggunaan batasan cek, periksa sys.check_constraintstampilan dalam database contoh AdventureWorks
  • Aturan di SQL Server hanya dapat digunakan kembali. Periksa Batasan (memungkinkan Anda untuk mempertahankan sintaks dari satu tempat, dan membuatnya lebih mudah untuk menerapkan batasan Anda ke database lain)

Seperti yang telah saya tunjukkan di sini, diperlukan beberapa pertimbangan menyeluruh untuk membangun pendekatan kendala terbaik dan paling defensif untuk desain database Anda. Anda harus terlebih dahulu mengetahui kemungkinan dan batasan dari berbagai jenis kendala di atas. Bacaan lebih lanjut dapat mencakup:

Batasan KUNCI ASING - Microsoft

Batasan kunci asing - w3schools

PERIKSA Kendala

Semoga berhasil! ;)


Sebagai komentar necro, tampaknya aturan sekarang sedang dibuang oleh Microsoft.
gary

6

Batasan tidak lain adalah aturan pada data. Data apa yang valid dan apa yang tidak valid dapat didefinisikan dengan menggunakan batasan. Sehingga integritas data dapat terjaga. Berikut adalah kendala yang banyak digunakan:

  1. Kunci Utama : yang secara unik mengidentifikasi data. Jika batasan ini sudah ditentukan untuk kolom tertentu maka kita tidak bisa memasukkan data duplikat di kolom tersebut
  2. Periksa : Seperti NOT NULL. Di sini kita dapat menentukan data apa yang bisa kita masukkan untuk kolom tertentu dan apa yang tidak diharapkan untuk kolom itu.
  3. Kunci asing : Referensi kunci asing ke baris tabel lain. Sehingga data yang dirujuk dalam satu tabel dari tabel lainnya selalu tersedia untuk tabel referensi.

3

Batasan dapat digunakan untuk menerapkan properti data tertentu. Contoh sederhananya adalah membatasi kolom int ke nilai [0-100000]. Pengenalan ini terlihat bagus.


3

Batasan menentukan nilai apa yang valid untuk data dalam database. Misalnya, Anda dapat menerapkan nilai bukan null ( NOT NULLbatasan), atau nilai tersebut ada sebagai batasan unik di tabel lain ( FOREIGN KEYbatasan), atau unik dalam tabel ini ( UNIQUEbatasan atau mungkin PRIMARY KEYbatasan tergantung pada kebutuhan Anda ). Batasan yang lebih umum dapat diimplementasikan dengan menggunakan CHECKbatasan.

The dokumentasi MSDN untuk SQL Server 2008 kendala mungkin tempat awal terbaik Anda.


2
  1. UNIQUEkendala (di mana PRIMARY KEYkendala adalah varian). Memeriksa bahwa semua nilai bidang tertentu unik di seluruh tabel. Ini adalah X-axis constraint (catatan)

  2. CHECKkendala (yang NOT NULLkendala adalah varian). Memeriksa apakah kondisi tertentu berlaku untuk ekspresi di atas bidang rekaman yang sama. Ini adalah Y-saksi kendala (bidang)

  3. FOREIGN KEYpaksaan. Memeriksa apakah nilai bidang ditemukan di antara nilai bidang di tabel lain. Ini adalah Zbatasan sumbu (tabel).


Batasan unik dan batasan kunci asing dapat ditulis menggunakan CHECKbatasan jadi mengapa mengklasifikasikannya secara berbeda? yaitu " Y-axis" (apapun artinya).
onedaywhen

2
@onedaywhen: bagaimana Anda mengimplementasikan FOREIGN KEYpenggunaan CHECKbatasan?
Quassnoi

1
@onedaywhen: coba buat tabel dengan batasan ini.
Quassnoi

1
@onedaywhen: apakah sulit untuk mencoba? Petunjuk: ini tidak akan berhasil.
Quassnoi

3
@onedaywhen: kueri yang Anda tulis tidak membuat batasan centang. Ini hanyalah SELECTpertanyaan. Anda tidak dapat menggunakan subkueri (atau konstruksi lain yang merujuk ke nilai di luar rekaman saat ini) dalam CHECKbatasan di SQL Server.
Quassnoi

2

Basis data adalah representasi logis terkomputerisasi dari model konseptual (atau bisnis), yang terdiri dari sekumpulan aturan bisnis informal. Aturan-aturan ini adalah makna data yang dipahami pengguna. Karena komputer hanya memahami representasi formal, aturan bisnis tidak dapat direpresentasikan secara langsung dalam database. Mereka harus dipetakan ke representasi formal, model logis, yang terdiri dari sekumpulan batasan integritas. Batasan ini - skema database - adalah representasi logis dalam database dari aturan bisnis dan, oleh karena itu, merupakan makna data yang dipahami DBMS. Oleh karena itu, jika DBMS tidak menyadari dan / atau tidak menerapkan batasan lengkap yang mewakili aturan bisnis, DBMS memiliki pemahaman yang tidak lengkap tentang apa arti data tersebut dan, oleh karena itu,

Catatan: DBMS- makna "dipahami" - batasan integritas - tidak identik dengan makna yang dipahami pengguna - aturan bisnis - tetapi, meskipun kehilangan beberapa makna, kami memperoleh kemampuan untuk memekanisasi kesimpulan logis dari data.

"Kelas Kesalahan Lama" oleh Fabian Pascal


2

Pada dasarnya ada 4 jenis batasan utama dalam SQL:

  • Batasan Domain: jika salah satu nilai atribut yang diberikan untuk tupel baru bukan dari domain atribut yang ditentukan

  • Batasan Kunci: jika nilai atribut kunci dalam tupel baru sudah ada di tupel lain dalam relasinya

  • Integritas Referensial: jika nilai kunci asing dalam tupel baru merujuk pada nilai kunci utama yang tidak ada dalam relasi yang direferensikan

  • Integritas Entitas: jika nilai kunci utama adalah null di tupel baru


-1

kendala adalah kondisi, yang dapat memvalidasi kondisi tertentu. Batasan yang terkait dengan database adalah Integritas domain, Integritas entitas, Integritas Referensial, Batasan Integritas yang Ditentukan Pengguna, dll.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.