ROWGUIDCOLとしてのPKまたは別のrowguid列を使用しますか?


9

ここで長い議論が続いているので、他の意見を聞きたいです。

uniqueidentifierがクラスター化されたPKを持つテーブルがたくさんあります。これが良いアイデアかどうかは、ここでは範囲外です(そして、すぐには変更されません)。

ここで、データベースをマージパブリッシュする必要があり、DEVは、既存のPKをROWGUIDCOLとしてマークするのではなく、個別のrowguid列の使用を推奨しています。

基本的に、彼らはアプリケーションが複製のみで使用されるものをドメインに持ち込むべきではないと述べています(それは彼らにとって「DBAのもの」だけです)。

パフォーマンスの観点からは、既存の列で実行できることを実行するために新しい列を追加する必要がある理由はわかりません。さらに、それは「DBAのもの」だけなので、DBAに選択させてみませんか?

私はDEVのポイントをある程度理解していますが、まだ同意しません。

考え?

編集:私はこの議論の中で少数派であり、私の立場に疑問を投げかけるDEVは私が尊敬し信頼する人々であることを追加したいだけです。これが私が意見を求めた理由です。
また、何かが欠けている可能性があり、その点を誤解している可能性があります。


PK値を将来変更する必要がある可能性はありますか?
ロバートLデイビス

いいえ、そうではありません。これは代理キーなので、アプリはその列を実際にはあまり機能しません。変更されることはなく、ユーザーに表示されることもありません。
スパゲッティ

なぜ彼らは別のrowguidcolが欲しいのですか?そして、もし可能であれば、彼らは一般的にどのような方式をPKのために選択しますか、そしてその理由は何ですか?
JustinC 2013年

@spaghettidbaクロスドメインと言えば、アプリのコードで使用する必要がある、または使用してはならないデザインパターンをどのくらいの頻度でユーザーに通知しますか?多分彼らは彼らの「ドメイン」に固執するべきですか?;-)。さらに、すべてのテーブルに16バイトの列を追加しても、パフォーマンスが低下し、メリットがありません。
ソロモンRutzky

回答:


7

基本的に、彼らはアプリケーションが複製のみで使用されるものをドメインに持ち込むべきではないと述べています(それは彼らにとって「DBAのもの」だけです)。

私は完全に同意します。しかし...主キーレプリケーションだけに使用されるわけはありません(おそらくアプリケーションが何らかの方法で使用します)。議論はこの文脈では意味をなさない。

いずれにせよ、私が知る限り、この「DBAスタッフ」がドメインの境界を越える方法は2つしかありません。

  1. アプリケーションが次のROWGUIDCOLように列を参照するクエリを使用している場合:

    DECLARE @a table (id uniqueidentifier ROWGUIDCOL);
    
    SELECT ROWGUIDCOL FROM @a;

    私はあなたの列のどれもまだこのプロパティを持っていないと想定しているので、アプリケーションはこれをしません。(ちなみに、これはROWGUIDCOLレプリケーションとは完全に別の概念です。マージレプリケーションがそれを使用するのは偶然です。)

  2. 主キー列は更新できなくなります。アプリケーションがこれを実行していて、別のアルゴリズムを使用するように変更を加えない場合は、テーブルに新しい列を追加する以外に選択肢がないため、説明は必要ありません。

これらの動作を除いて、ROWGUIDCOLプロパティは完全に透明です。あなたはそれを追加することができ、アプリケーションは決して知りません。どのタイプのデータ複製シナリオも、アプリケーションに対して可能な限り透過的である必要があります。


回答ありがとうございます。いいえ、アプリケーションは1も2も実行していません。完全を期すために、一部のテーブルはPKのROWGUIDCOLプロパティで既に装飾されています。
スパゲッティ

レプリケーションはアプリケーションに対して透過的である必要があることには同意しますが、公開する必要があるデータベースは、ゼロからのレプリケーションを検討する必要があると考えています。たとえば、マージレプリケーションでのID管理は完全にPITAです。たとえば、最初からパブリッシュをマージする必要があることがわかっている場合、それは避けてください。
スパゲッティ

@spaghettidba:はい、複製がカード内にある場合、データベースは間違いなくそのために設計する必要があることに完全に同意します。多くの場合、ベストプラクティスに従うだけでほとんどの方法が得られます。設計上の問題が最も多いのは、醜くて毛むくじゃらのレガシーデータベースです。私の経験から、特にマージレプリケーションは、他のどのレプリケーションメカニズムよりも困難です。
Jon Seigel 2013年

@spaghettidbaおよびJon:参考までに、少なくともSQL Server 2008 R2(FeatureID 182を検索)以降ROWGUIDCOL、そのコンテキストでの(CREATE TABLE/ ALTER TABLEステートメントではない)の使用は非推奨になりました。$ROWGUID
ソロモンRutzky

6

同意する。PK値を変更できる必要がない限り、既存のuniqueidentifier列をrowguidcolとして使用することをお勧めします。


5

「基本的に、彼らはアプリケーションがそのドメインにレプリケーションのみで使用されるものを持ち込むべきではないと言っています(それは彼らにとって「DBAのもの」だけです)。」

ただし、レプリケーションのみに使用されるわけではありません。また、(そしてすでに)あなたのPKでもあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.