Pertanyaan ini bukan tentang perbedaan antara SQL dan NoSQL. Saya mencari alasan untuk sesuatu yang benar-benar tidak masuk akal bagi saya saat ini (mungkin karena kurangnya pemahaman atau penghargaan saya).
Kami telah memulai proyek baru dari awal menggunakan MVC5, kode kerangka kerja Entity 6 pertama dan SQL Server 2008. Ketika arsitek meninjau skema database dinyatakan bahwa semua kunci asing dan kendala lain harus dihapus karena ini adalah "logika bisnis" dan harus diterapkan dalam lapisan bisnis kode aplikasi.
Pendapat saya adalah kunci asing merupakan bagian dari integritas data / referensial dan tidak benar-benar meniru logika bisnis. Saya melihat logika bisnis lebih sebagai proses dan validasi yang mengontrol apa / kapan / bagaimana / mengapa referensi diterapkan. Saya bisa mengerti bahwa kendala unik bisa dibilang proses bisnis, tetapi bagi saya ini hanya melengkapi logika dan membentuk bagian dari integritas.
Argumen kedua adalah tujuannya adalah untuk mengadopsi pendekatan NoSQL terhadap data. Saya menemukan ini benar-benar tidak biasa dan tidak lazim: mempertimbangkan penggunaan SQL-Server 2008, kebutuhan untuk pelaporan, data yang tidak scaling ke terabyte dan kurangnya pertimbangan terhadap teknologi seperti Mongo, Raven, dll.
Adakah yang pernah mengalami skenario seperti itu sebelumnya? Mengapa ada orang yang mengadopsi pendekatan NoSQL dalam SQL Server yang dirancang untuk data referensial dan tidak ingin kunci asing?
sumber
Jawaban:
Lalu dia idiot, dan beberapa kutipan dari basis kode Anda kemungkinan akan berakhir di The Daily WTF suatu hari nanti. Anda benar bahwa pendekatannya tidak masuk akal, dan terus terang juga tidak penjelasannya.
Coba jelaskan kepadanya bahwa batasan integritas referensial bukan "logika bisnis"; mereka adalah standar kebenaran dengan verifikasi bawaannya sendiri. Logika bisnis adalah tentang apa yang Anda lakukan dengan data; integritas adalah tentang memastikan bahwa data itu sendiri tidak rusak. Dan jika itu tidak berhasil ... yah, dia yang berkuasa. Anda dapat mengikuti rencananya dan mencoba mengurangi kerusakan, atau mulai mencari tempat yang lebih baik untuk bekerja. (Atau keduanya.)
sumber
Selain pernyataan blanket, ada baiknya mengakui ada alasan kuat dan kuat untuk memilih untuk tidak menggunakan keunikan atau batasan kunci asing. Sebagian besar berjalan seperti ini:
Lihat juga Apa yang salah dengan kunci asing?
Tetapi itu tidak sesuai dengan alasan dalam pertanyaan Anda.
Alasan ini agak aneh. Keunikan dan kendala integritas lainnya adalah domain dari database ACID. Kode aplikasi Anda tidak dapat mendekati jaminan atomitas dan integritas SQLServer. Jika Anda membutuhkan integritas data yang kuat, Anda akan bodoh mengabaikan database.
Alasan kedua sebenarnya bukan alasan; itu sebuah kesimpulan. Meskipun memang benar bahwa kendala adalah trade-off antara kebenaran dan kinerja, dan database NoSQL bias terhadap yang terakhir.
Mungkin arsitek sistem Anda memiliki alasan yang sah dalam pikiran, dan Anda salah dengar. Atau mungkin dia idiot.
Bagaimanapun, ada yang valid (meskipun tidak alasan universal) untuk menahan diri dari menggunakan keunikan dan batasan kunci asing.
PS Jika Anda menyimpulkan bahwa Anda tidak ingin kunci asing, masih boleh menggunakan database relasional. Sebagai generalisasi, database relasional lebih matang daripada rekan-rekan NoSQL mereka. Sebagai node tunggal, mereka bahkan bisa lebih cepat , dan abstraksi NoSQL dapat dibangun di atasnya .
sumber