Saya sebagian besar adalah pengembang aplikasi tetapi menemukan diri saya harus melakukan semua pekerjaan database di muka untuk proyek saya saat ini ( btw ... MS SQL Server 2008 ). Sebagai keputusan pertama, saya mencoba mencari tahu apakah akan membagi negara saya menggunakan Database terpisah atau menggunakan Skema terpisah dalam database yang sama. Saya telah melakukan sedikit bacaan pada Skema SQL Server dan sepertinya cara alami untuk memisahkan objek domain ( yang saya suka ), tapi saya tidak yakin apakah mungkin ada biaya tersembunyi untuk pola ini.
Apa hal-hal yang lebih praktis yang harus saya pertimbangkan ketika memilih antara dua pendekatan ini? Jika saya menghindari dbo.mytable
mendukung myschema.mytable
apakah saya akan menciptakan tantangan lain ( atau masalah ) untuk arsitektur saya?
Sebagai catatan ... Pada beberapa titik ini akan diserahkan ke DBA nyata untuk dipertahankan / didukung jadi saya mencoba untuk memastikan saya tidak membuat hidup mereka lebih sulit.
sumber
Jawaban:
Saya akan mulai dengan mengatakan jangan menganggap skema sebagai ruang nama atau domain objek dalam arti OO. Skema pada dasarnya adalah wadah izin dengan beberapa nilai tambah (lihat di bawah)
Juga, "skema terpisah" atau "database terpisah" adalah 2 konsep yang berbeda. Data yang perlu konsisten secara transaksi dan referensi perlu berada dalam database yang sama. Lihat Satu Database atau Sepuluh? artikel blog untuk lebih.
Dalam database itu, Anda mungkin atau mungkin tidak menggunakan skema untuk mengatur objek Anda.
Secara pribadi, saya penggemar skema dan selalu menggunakannya tetapi untuk hal-hal seperti izin dan pengelompokan logis. Untuk itu, saya akan mengarahkan Anda ke pertanyaan sebelumnya di mana Anda dapat melihat pendapat umum yang mendukung mereka:
Untuk kasus untuk database yang terpisah, lihat jawaban Aaron , tetapi ini semua bergantung pada persyaratan "yang konsisten secara transaksi dan referensial".
sumber
Setuju dengan @gbn. Saya sudah merancang solusi menggunakan skema untuk pemisahan dan basis data untuk pemisahan, dan saya menemukan menggunakan basis data jauh lebih praktis. Beberapa alasan:
<schema>
di depan semua referensi objek. Ini cocok untuk banyak SQL dinamis, banyak login aplikasi yang berbeda dengan skema default (artinya kode Anda tidak akan menggunakan awalan skema, mengandalkan skema default pengguna aplikasi - dapat menyebabkan penggembungan cache rencana masif dan debugging yang sulit), atau banyak prosedur tersimpan yang harus dikelola (gambar hanya laporan sederhana, jika Anda memerlukan satu per skema, maka kode berubah, sekarang Anda harus mengubah kode yang sama beberapa kali, satu kali untuk setiap skema).sumber