Praktik terbaik untuk memaksimalkan portabilitas di SQL Server 2016

8

Ketika datang untuk mengembangkan prototipe solusi, seringkali teknologi belum diputuskan dan mungkin tidak akan sama dengan yang akan digunakan dalam produk jadi.

Dalam skenario ini saya cenderung menggunakan Microsoft SQL Server menulis kueri sebagai standar mungkin untuk menyederhanakan migrasi akhirnya ke server lain.

Apakah ada cara atau praktik yang dikenal untuk menegakkan penggunaan standar SQL melalui dialek T-SQL langsung di SQL Server atau melalui SQL Server Management Studio (SSMS)?

s.demuro
sumber
3
Portabilitas adalah tujuan buku teks yang bagus, tetapi jarang terjadi dalam praktiknya. Ketika Anda memiliki pilihan antara sintaks standar ( <>) dan non-standar ( !=), di mana tidak ada kompromi pada kinerja atau pemeliharaan, saya selalu memilih standar. Tetapi ketika datang dengan biaya lain, atau tidak ada standar yang setara, saya memanfaatkan dan menjadi milik. Hal-hal yang Anda menyerah hanya karena kemampuan untuk sepenuhnya beralih platform grosir tidak layak.
Aaron Bertrand
6
Satu-satunya portabilitas waktu adalah tujuan yang realistis adalah ketika Anda menulis aplikasi yang perlu diintegrasikan dengan beberapa platform secara bersamaan karena pelanggan Anda menggunakan platform yang berbeda. Meskipun begitu, kecuali jika Anda ingin fungsi menjadi terbatas dan kinerjanya buruk pada semua platform, saya akan mengirimkan paket yang dimaksudkan untuk memanfaatkan fitur platform individual.
Aaron Bertrand
1
Hanya penasaran; dalam sejarah yang pernah ada, pernahkah Anda secara pribadi mengubah sistem basis data yang digunakan aplikasi untuk tingkat yang setara (misalnya Oracle -> SQLS)? Saya belum
Caius Jard
2
Hal lain yang membuat saya penasaran; berapa banyak prototipe Anda cukup bertahan menjadi sistem tingkat produksi penuh? Sebagian besar prototipe saya berbagi hampir tidak ada aspek dengan sistem lengkap yang dituliskan setelah proto telah membuktikan konsep dan mengeluarkan beberapa pendekatan yang masuk akal tentang bagaimana sebuah solusi seharusnya terlihat; apakah Anda membuat purwarupa Anda terlalu sempurna / bertahan terlalu lama?
Caius Jard

Jawaban:

16

Pengguna Aaron Bertrand membuat beberapa komentar yang sejalan dengan pemikiran saya tentang pertanyaan Anda. Ini lebih merupakan tantangan bingkai daripada jawaban untuk pertanyaan spesifik Anda, tetapi saya pikir ini berharga untuk dipertimbangkan dalam konteks ini.

Portabilitas adalah tujuan buku teks yang bagus, tetapi jarang terjadi dalam praktiknya.

Jika Anda harus mengubah platform di beberapa titik, akan ada perubahan yang diperlukan untuk aplikasi, database, dan mungkin banyak hal lainnya. Jika Anda bisa menjadi "platform agnostik" tanpa terlalu banyak usaha, itu tidak masalah. Tapi itu benar-benar keputusan bisnis yang buruk untuk menggunakannya sebagai tujuan desain.

Ada banyak tempat online di mana orang mendiskusikan kelemahan atau pemrograman dengan cara ini, berikut ini salah satu yang menurut saya cukup menarik:

Lapisan Abstraksi Basis Data Harus Mati!

Kekeliruan Portabilitas

Penulis menggunakan argumen yang saya dengar sepanjang waktu: Jika Anda menggunakan lapisan abstraksi yang baik, akan mudah untuk berpindah dari $ this_database ke $ other_database di ujung jalan.

Itu omong kosong. Tidak pernah mudah.

Dalam setiap aplikasi yang didukung basis data non-sepele, tidak ada yang berpikir beralih database sebagai hal yang mudah. Berpikir bahwa "pertobatan akan menyakitkan" adalah fantasi.

Insinyur yang baik mencoba memilih alat terbaik untuk pekerjaan itu dan kemudian melakukan segala yang mereka bisa untuk mengambil keuntungan dari fitur unik dan paling kuat dari alat mereka. Dalam dunia basis data, itu berarti petunjuk spesifik, pengindeksan, tipe data, dan bahkan keputusan struktur tabel. Jika Anda benar-benar membatasi diri pada subset fitur yang umum di semua RDBMS utama, Anda merugikan diri sendiri dan klien Anda.

Itu tidak berbeda dengan mengatakan "Saya melakukan untuk membatasi diri pada subset PHP yang sama di Perl dan C, karena saya mungkin ingin beralih bahasa suatu hari dan 'tanpa rasa sakit' port kode saya."

Itu tidak terjadi.

Biaya berpindah basis data setelah aplikasi dikembangkan dan digunakan cukup tinggi. Anda memiliki kemungkinan skema dan perubahan indeks, perubahan sintaksis, pengoptimalan dan penyetelan yang harus dilakukan kembali, petunjuk untuk menyesuaikan atau menghapus, dan sebagainya. Mengubah mysql_foo () ke oracle_foo () benar-benar adalah masalah Anda yang paling kecil. Anda akan menyentuh sebagian besar, jika tidak semua, dari SQL Anda - atau Anda setidaknya harus memverifikasinya.

Itu tidak terdengar "tidak menyakitkan" bagi saya.

Josh Darnell
sumber
11

Jangan menegakkan STD SQL.

Tentukan dulu DBMS mana yang akan Anda gunakan sesuai dengan kebutuhan proyek Anda, dan manfaatkan itu.

McNets
sumber
9

Tidak juga.

Ada SET FIPS_FLAGGER 'FULL'.

Ini mencetak peringatan untuk SQL non-standar - tetapi beberapa peringatan adalah

  • Saya tidak yakin standar spesifik apa yang digunakan ini (dan saya curiga itu mungkin SQL 92)
  • Dari tes cepat ini tidak mengeluh tentang penggunaan +operator untuk penggabungan string atau fungsi eksklusif seperti GETDATE()sehingga sepertinya tidak terlalu komprehensif.
Martin Smith
sumber
3

"Seringkali teknologi belum diputuskan"

Saya akan mengatakan ini benar-benar BUKAN terjadi dalam pengalaman saya. Sebenarnya saya tidak percaya saya pernah mendengar hal ini kecuali mungkin sesuatu yang sangat kecil.

Biasanya ini ditetapkan, dan solusi baru diharapkan untuk memanfaatkan apa yang sudah digunakan.

Saya akan setuju dengan para komentator di atas dalam hal itu bahkan jika itu tidak ditetapkan, Anda harus menetapkan itu terlebih dahulu sebelum Anda mulai menulis pertanyaan dan kode lainnya. Kalau tidak, Anda hanya berpotensi membiarkan diri Anda untuk banyak upaya sia-sia dalam menulis ulang langsung dari kelelawar.

Marbry Hardin
sumber