2009-05-08 2 views
0

私は、私のオブジェクトを識別するための人にやさしいコードを作成したいと考えています。データベース生成の人にやさしいコード

私は、次の規則を使用して考えている:

  • 6桁のランダムな番号
  • は、最初の文字は、すべてから*各コードは2以上のedit distance値を持つゼロ
  • ではありません他のこのようなコード多分
  • チェックサムすぎ

私はあることを強制するために、私のMS SQLデータベースを希望私が使用するコードは、それぞれ固有のものばかりでなく、上記の基準にも準拠しています。

このようなルールを適用するために、データベースチェック制約はどのように記述しますか?

データベースに挿入された行のデフォルト値などの数値を使用させるにはどうすればよいですか?

**ので、1回のキーストロークタイプミスが異なる-より-意図記録を盗んではないだろう*

答えて

1

は、あなたが挿入されたデータのための希望のどんな制約をチェックするために、ストアドプロシージャを使用してください。

ストアドプロシージャを使用して、必要に応じてこれらのオブジェクトを生成することもできます。

データベースをすべてあなたのためにするのはいいことですが、コード内ですべて行うことは、この種のものを維持することを愛するDBAを派遣していない限り、長期的には維持しやすくなります。

あなたのアイデアやアルゴリズムは賢明だと思います。要件を満たしていれば、チェックサムは素晴らしいことだと思います。チェックサムだけでは、編集距離に関係なく、タイプミスを検出することができます。

+0

あなたはそうです。シンプルな一桁のMOD 10チェックサムを単純な一意の数値に追加すると、編集距離が2以上になります。 –

1

数値を計算するストアドプロシージャを作成します。その格納されたprocをテーブル定義の列定義の値DEFAULT()として使用します。注:私はこれを試していないので、完全に可能かどうかわかりません。

1

どのくらいのIDが必要ですか?

あなたはボーナスとして、また2

の編集距離と、IDとして列を宣言し、100000に開始値を設定し、6桁の数字を生成する12の増加でしたこれはかなり速いです。しかし、これはすべてが密集しているわけではないので、数字が足りなくなることがあります。

CREATE TABLE [Items] 
(
    [id] int IDENTITY(100000,12) NOT NULL primary key, 
    [Data] varchar(50) NULL 
) 
+0

私はそれについて考える必要があります。別の数字が必要な場合があります。 –

+0

私はむしろ数字がランダムな順序であるので、レコードの総数などの意図しない情報を意味するものではありません。 –

0

整数主キーを用いてスクランブルために、すべての(または多くの)可能な有効なコードのテーブルを移入するための1回限り使用のプログラムを書きます。

コードテーブル:

Id HumanFriendlyCode 

1 100124 
2 991302 
3 201463 
4 157104 
... ... 

それからちょうど自動インクリメント整数の外部キーと一意性制約とそのコード表内の行にオブジェクトテーブルを関連付けます。

シングテーブル:

Id         CodeId ... 

e9d29b14-0ea6-4cfd-a49f-44bcaa7212eb 1  ... 
91906bb7-14ed-4acc-bf23-c4bd1631797f 2  ... 
41ace075-f9f8-46b7-b114-cb17765c4e76 3  ... 
2fba1a58-7a91-4da6-a4a2-7cacef8603db 4  ... 

誰もが今までこのような何かをやっ?

0

このチェック制約は、データベースの列にチェックサムを強制します:

ALTER TABLE tblCode 
ADD CHECK (
    CAST(SUBSTRING(CAST(Code AS VARCHAR), 6, 1) AS INTEGER) = 
    (
     CAST(SUBSTRING(CAST(Code AS VARCHAR), 1, 1) AS INTEGER) + 
     CAST(SUBSTRING(CAST(Code AS VARCHAR), 2, 1) AS INTEGER) + 
     CAST(SUBSTRING(CAST(Code AS VARCHAR), 3, 1) AS INTEGER) + 
     CAST(SUBSTRING(CAST(Code AS VARCHAR), 4, 1) AS INTEGER) + 
     CAST(SUBSTRING(CAST(Code AS VARCHAR), 5, 1) AS INTEGER) 
    ) % 10 
) 

6桁目は、最初の5桁の和の10を法としなければなりません。

1

UIまでのあなたの敵はコードの長さです。アルファベット文字を追加することをお勧めします(ゼロ、あと、1つ、目を省略)。実質的に長さを短くし、特に転位のために衝突を起こしにくくします。

関連する問題