1

現在のデータベース作業の一環として、データベースの更新プロセスを検討しています。

繰り返し提起されてきたポイントは、システムとユーザーの価値観を扱うことです。プロジェクトでは、ユーザーとシステムの値が一緒に保存されます。例えば...

テンプレートのリストがあります。

1, <system template>

2, <system template>

3, <system template>

これらはアプリで列挙型(1、2、3)にマップされます

次に、ユーザーが入って追加します...

4, <user template>

...と...

5, <user template>

次に、アップグレードを発行し、アップグレードスクリプトの一部として挿入します。

<new id> [6], <new system template>

次に!!...新しいシステムテンプレートにバグが見つかり、それを更新する必要があります...問題はどのようにですか?ID6を使用してレコードを更新することはできません(9または999として挿入した可能性があるため、他のメカニズムを使用してレコードを識別する必要があります)

したがって、これには2つの可能な解決策があります。

赤いコーナー(スピード)で...

ユーザーIDを5000(または他の値)で開始し、データを10000(または他の値)でテストするだけです。これにより、システム値を変更して、次のID範囲の下限までテストすることができます。

利点...すばやく簡単に実装でき、

短所...十分な大きさの範囲を選択しないと、値が不足する可能性があります。

青いコーナー(スケーラビリティ)...

システムデータとユーザーデータを別々に保存し、GUIDをIDとして使用し、ビューを使用して2つのリストをマージします。

利点...スケーラブル..DBサイズに関する制限はありません。

短所..実装がより複雑です。(多くから1つの更新可能なビューなど)


私は最初の選択肢を真っ向から探しますが、私をバックアップするための弾薬を探しています!

誰かがこれらのアプローチについて何か考えを持っていますか、あるいは私たちが見逃したものさえありますか?

4

6 に答える 6

1

システムとユーザーの値を1つのテーブルに格納するように変更して、2番目を使用することをお勧めします。GUIDは、この方法で非常に信頼できます。

別のアイデア:システム値に指定するテキストベースのID(GUIDは不要)を使用します。これは、ランダムな文字列またはユーザー値のある種のカスタムロジックに基づく文字列によって生成されます。

別のアイデア:最初のアプローチを使用しますが、値がシステムかユーザーかを示すフラグを使用してテーブルを拡張します。多分これが最も簡単です。わかりました。正しいシステム値を更新するには、なんらかのメカニズムを作成する必要がありますが、それは簡単に実行できます。

于 2008-08-13T12:36:21.193 に答える
1

+1 Biri のテキスト ベースの ID - 「template_mnemonic」テキスト ベースの列を定義し、それを主キーにします。これは、ユーザーが挿入したときに既知の値になり、開発者が決定 (または自動生成) し、ユーザーが指定したテンプレートの数に関係なく、いつでもニーモニックでテンプレートを参照できます。また、ユーザーはテンプレートに意味のある命名規則を設定できます。

于 2008-08-13T12:51:41.067 に答える
1

データベースの ID として GUID を使用して問題 (パフォーマンスまたは開発 - TDD と単体テストを含む) が発生したことはありません。主キーとして GUID (および関連する可能性のあるGOTCHAS ) を使用する方法について詳しく知りたい場合は、ここここ、およびここを参照してください。朝の歯磨きのように:-)

上記の質問については、テンプレートがユーザー ベースかシステム ベースかを示す 3 番目の列 (可能であれば) をお勧めします。または、少なくとも、システム テンプレートを挿入してそのリストを保持するときに、システム テンプレートの GUID を生成することもできます。そのため、テンプレートを更新する必要がある場合は、他のテンプレートを上書きすることを恐れずに、DEV、UAT、および/または PRODUCTION データベースで同じ GUID をターゲットにすることができます。ただし、3 番目の列は、すべてのシステム テンプレートまたはユーザー テンプレートを自由に選択する場合に便利です。それらを 2 つのテーブルに分ける必要はありません (これはやり過ぎです)。

それが役立つことを願っています、

ロブ G

于 2008-08-13T14:06:58.013 に答える
0

取得できなかったかもしれませんが、GUIDをIDとして使用し、ユーザーデータとシステムデータを一緒に保持することはできませんか?次に、(変更できない)GUIDを使用してシステムデータにアクセスできます。

于 2008-08-13T12:30:47.867 に答える
0

GUID が問題になるとは思いません。

それを避けたい場合は、フラグを使用してください。

ID 整数

テンプレートは何でも

フラグ列挙/整数/ブール

フラグは、実際の値がシステム値かユーザー値かを示します。

システム値を更新したい場合は、ID 順に並べられたシステム値のみを要求すると、実際の挿入順序が表示されます (ID がいっぱいにならないように、bigint などを用意する必要があります)。削除された ID を元に戻すことはできません)。このリストでは、x. レコードは×です。挿入されたシステム値。

于 2008-08-13T12:47:39.407 に答える
0

より良い第 3 の解決策があると思います。同じテーブルに 2 つの異なるものを保存していて、ユーザー テンプレート用とシステム テンプレート用に 2 つの別々のテーブルを作成した方がよいと思います。次に、2 つのテーブルに対するビューを作成して、アプリケーションに対して単一のオブジェクトとして表示できるようにすることができます。明らかに、私はあなたのアプリケーションについて完全な知識を持っていません.これは、さまざまな理由で不可能かもしれませんが、GUIDよりもきちんとしたソリューションであり、IDの範囲よりもはるかに安全だと思います.いつかあなたを噛む)

于 2008-08-18T14:08:13.550 に答える