Haruskah RDBMS multi-server saya atau Aplikasi saya menangani integritas referensial database?

16

Haruskah item seperti Kunci Asing, Kendala, Nilai Default, dan sebagainya ditangani oleh sistem manajemen basis data (dalam hal ini, MS SQL 2005) atau aplikasinya? Saya telah mendengar pendapat dari kedua belah pihak dan sejujurnya saya tidak yakin ke mana harus pergi.

Ada kemungkinan kita akan menjangkau beberapa server / database dan saya tidak berpikir Foreign Key dapat digunakan di server yang terhubung. Selain itu, ada beberapa referensi melingkar dalam desain basis data yang mencegah saya untuk menggunakan ON UPDATE CASCADEsemuanya.

Basis datanya adalah MS SQL 2005 (mungkin 2008) dan semua interaksi dengannya harus melalui aplikasi.

Rachel
sumber
3
Saya memiliki sesuatu untuk dipelajari di sini karena saya tidak dapat membayangkan tidak menggunakan RDBMS.
bigtang

Jawaban:

10

Jika ada kemungkinan DB akan dimodifikasi di luar aplikasi Anda, Anda ingin kendala dalam database. Jika DB adalah dan selalu tidak lebih dari bagian belakang aplikasi, Anda dapat mengabaikannya, meskipun saya akan mendokumentasikannya untuk berjaga-jaga dan mungkin menyimpannya jika kinerja tidak terlalu buruk. (Perangkat lunak Peoplesoft bekerja dengan cara ini - kendala ada dalam perangkat lunak, dan (Saya tidak mengada-ada) ini menjalankan semuanya sebagai SYS pada Oracle.)

Anda ingin hal-hal seperti itu dipantau oleh aplikasi, sehingga dapat bereaksi dengan cerdas dan tidak terbaik mengembalikan pesan kesalahan database ke pengguna.

Dan, ya, ini adalah cakupan ganda, tetapi tanpanya Anda mungkin akan mendapatkan korupsi data yang dapat dicegah atau antarmuka pengguna yang buruk.

David Thornley
sumber
5

Idealnya keduanya. Anda tidak harus tidak memiliki DB menanganinya, tetapi sekali lagi, jika aplikasi muncul dengan data bahwa DB akan menolak, itu kesalahan runtime, sehingga aplikasi harus memiliki setidaknya beberapa kode yang didedikasikan untuk melestarikan integritas referensial. Selain itu, menyiapkan batasan yang tepat dalam SQL di DB jauh lebih sederhana daripada mengatur kode untuk sisi klien, jadi melakukannya pada DB sangat mengurangi jumlah pekerjaan yang harus Anda lakukan.

Mason Wheeler
sumber
1

Jika ini penting, biarkan database yang menanganinya. Dengan begitu, Anda tidak perlu khawatir tentang seseorang yang mengakses database di luar aplikasi Anda dan mengubah atau memasukkan beberapa data yang tidak konsisten atau duplikat. Kecuali itu beberapa hal khusus aplikasi tingkat tinggi (seperti "hanya pengguna di departemen X yang memiliki kelas akses ZZZ yang boleh diijinkan masuk ke grup 999"), tetapi itu biasanya tidak disebut sebagai integritas "referensial".

TMN
sumber
1

Saya akan mengatakan dimasukkan ke dalam database. Jika Anda menggunakan kerangka kerja terus-menerus, Ini akan mengambil kunci secara otomatis.

Lareau
sumber
1

Keduanya jelas cara untuk pergi. Anda akan menginginkan logika validasi dalam kode Anda untuk mencegah pembaruan dan menyisipkan yang buruk serta untuk memberi tahu pengguna apa yang salah dan bagaimana cara memperbaikinya. Dan memiliki database di sana untuk mendukung hal-hal jadi jika sesuatu masuk dan tidak berjalan melalui validasi itu tidak akan memecah hal-hal di telepon adalah hal yang baik.

Anda harus menyimpan hal-hal basis data lebih tinggi. Misalnya, menegakkan integritas referensial dan mungkin beberapa tidak nol. Tetapi jangan khawatir tentang membatasi panjang atau format karena yang terbaik diberikan kepada aplikasi sepenuhnya.

Wyatt Barnett
sumber