Ada perdebatan panjang yang terjadi di sini jadi saya ingin mendengar pendapat lain.
Saya punya banyak tabel dengan PK pengidentifikasi unik. Apakah ini ide yang bagus, di luar jangkauan (dan tidak akan berubah dalam waktu dekat).
Sekarang, database harus digabung diterbitkan dan DEVs menganjurkan penggunaan kolom rowguid terpisah daripada menandai PK yang ada sebagai ROWGUIDCOL.
Pada dasarnya, mereka mengatakan bahwa aplikasi tidak boleh membawa sesuatu ke domainnya yang hanya digunakan oleh replikasi (itu hanya "barang DBA" untuk mereka).
Dari sudut pandang kinerja, saya tidak melihat alasan mengapa saya harus menambahkan kolom baru untuk melakukan sesuatu yang bisa saya lakukan dengan yang sudah ada. Selain itu, karena ini hanya "barang DBA", mengapa tidak membiarkan DBA memilih?
Saya agak mengerti poin DEVs, tapi saya masih tidak setuju.
Pikiran?
EDIT: Saya hanya ingin menambahkan bahwa saya adalah minoritas dalam debat ini dan DEV yang mempertanyakan posisi saya adalah orang yang saya hormati dan percayai. Ini adalah alasan mengapa saya terpaksa meminta pendapat.
Saya mungkin juga kehilangan sesuatu dan bisa salah mengerti maksud mereka.
sumber
Jawaban:
Aku sangat setuju. Tapi ... kunci utama tidak hanya digunakan untuk replikasi (mungkin aplikasi menggunakannya dalam beberapa cara). Argumen tidak masuk akal dalam konteks ini.
Bagaimanapun, sejauh yang saya ketahui, hanya ada 2 cara untuk "hal-hal DBA" ini untuk melintasi batas domain:
Jika aplikasi menggunakan kueri yang mereferensikan
ROWGUIDCOL
kolom seperti ini:Saya berasumsi belum ada kolom Anda yang memiliki properti ini, jadi aplikasi tidak akan melakukan ini. (Omong-omong,
ROWGUIDCOL
adalah konsep yang sepenuhnya terpisah dari replikasi. Kebetulan penggabungan replikasi menggunakannya.)Kolom kunci utama tidak lagi dapat diupdate. Jika aplikasi melakukan ini dan perubahan tidak akan dilakukan untuk menggunakan algoritma lain, tidak ada pilihan selain menambahkan kolom baru ke tabel, dan oleh karena itu tidak diperlukan diskusi.
Selain perilaku itu,
ROWGUIDCOL
properti itu sepenuhnya transparan. Anda bisa menambahkannya, dan aplikasi tidak akan pernah tahu. Semua jenis skenario replikasi data harus setransparan mungkin untuk aplikasi.sumber
ROWGUIDCOL
dalam konteks itu (yaitu tidak dalamCREATE TABLE
/ALTER TABLE
pernyataan) telah ditinggalkan sejak setidaknya SQL Server 2008 R2 (mencari FeatureID 182) yang mendukung$ROWGUID
.Saya setuju. Selama tidak perlu nilai PK untuk dapat berubah, maka akan lebih baik menggunakan kolom uniqueidentifier yang ada sebagai rowguidcol.
sumber
"Pada dasarnya, mereka mengatakan bahwa aplikasi tidak boleh membawa ke domainnya sesuatu yang hanya digunakan oleh replikasi (itu hanya" barang DBA "untuk mereka)."
Tapi itu tidak digunakan untuk replikasi saja. Ini juga (dan sudah) PK Anda.
sumber