0

ドキュメントはデータベース(SQLサーバー)に格納されます。ドキュメントはさまざまなテーブルに分散されているため、すべてを含む1つのテーブルはありません。

現在、すべてのドキュメントにシステム全体で一意のIDを指定する必要があります。これは、GUIDのようではなく、半読み取り可能なIDです。

これは、新しいドキュメントが作成されたときにインクリメントされる数値だけで単一の行/列を持つ単一のテーブルを作成することによって以前に行われたことを確認しました。

これはそれを実行するための最良の方法ですか、誰かが更新しようとしている場合に現在の番号を誰も読み取らないようにするにはどうすればよいですか?

この場合、番号は001のようなものにすることができ、必要に応じて自動インクリメントします。私は、派手な識別子を取得するのではなく、主に衝突を停止することを心配しています。

4

3 に答える 3

2

単一の行/列のアプローチが必要な場合は、次を使用しました:

declare @MyRef int
update CoreTable set @MyRef = LastRef = LastRef + 1

更新は安全です。更新を実行する各ユーザーは、@MyRef. これは、個別の読み取り、インクリメント、更新を行うよりも安全です。


テーブル定義:

create table CoreTable (
    X char(1) not null,
    LastRef int not null,
    constraint PK_CoreTable PRIMARY KEY (X),
    constraint CK_CoreTable_X CHECK (X = 'X')
)
insert into CoreTable (X,LastRef) values ('X',0)
于 2012-10-02T06:41:45.013 に答える
1

Documents「古典的な」アプローチの 1 つは、 (少なくとも) ID 列 ( )を持つ別のテーブル (たとえば ) を持つことint identityです。次に、既存のすべてのドキュメント テーブルに外部キー列と制約を追加します。これにより、すべてのテーブルでドキュメント ID の一意性が保証されます。

このようなもの:

CREATE TABLE Documents (Id int identity not null)


ALTER TABLE DocumentTypeOne 
ADD CONSTRAINT (DocumentId) DocumentTypeOne_Documents_FK Documents(Id)
于 2012-10-02T06:05:41.947 に答える
1

これには Redis を使用できます。この記事をご覧ください: http://rediscookbook.org/create_unique_ids.html

Redis は非常に高速なメモリ内 NoSQL データベースですが、永続化機能を備えています。Redis インスタンスをすばやく利用し、それを使用して一意の増分番号を作成できます。

その後、アプリで他の多くの目的に Redis を活用できます。

Redis のインストールを伴わない問い合わせに対するもう 1 つの提案は、トランザクションにカプセル化しながら、提案したように単一の DB 行/列を使用することです。そうすれば、競合に遭遇することはありません。

于 2012-10-02T04:55:01.263 に答える