1

名前、父の名前、母の名前、生年月日、出生地の属性を持つ最大 12 文字の長さの一意のキーを生成するにはどうすればよいですか。

前もって感謝します :)

4

5 に答える 5

8

一意の識別子の主な、そして実際に唯一の属性は、それが一意であることです (考慮の範囲内で、テーブル、スキーマ、またはグローバルであっても)。このような ID に「現実世界」の値を組み込むことは意味がありません。

これらの属性が人物を一意に説明していることが確実な場合は、言及する属性に一意の制約を作成する必要があります。この属性の組み合わせが、テーブルの「自然キー」を形成します。

一意の ID は「代理キー」であり、そのテーブルとの結合で自然キーのすべての列を指定する必要がなくなる便利なハンドルです。一意の ID を取得する方法は、データベースに依存します。たとえば Oracle では、挿入トリガーと組み合わせてシーケンスを使用できます。

自然キーの一意の制約により、同じ人物を 2 回挿入することはできなくなりますが、最初にテーブルをチェックして、その人物が既に存在するかどうかを確認する必要があります。その場合は、その時点からすでに割り当てられている ID を使用してください。もちろん、これを組み合わせて、フィールドを指定すると ID が返され、ID を検索する操作が非表示になるか、新しい場合は作成してから新しい ID が返されます。

于 2009-11-18T17:21:20.277 に答える
6

これらの列でさえ、おそらく一意であるには十分ではありません。人の名前は (結婚、選択などで) 変更される可能性があるため、通常、それを使用して一意のキーを生成することはありません。

通常、要件に応じて、自動番号/ID/シーケンスまたは UUID/GUID などのサロゲートを使用します。

于 2009-11-18T17:06:44.550 に答える
4

これはあなたが説明するキーではありませんが、キーの代わりに使用したい短い構造化データです。おそらくもっと役立つでしょう:

-- 特定の 12 文字のキーからこれらの属性を回復できるようにしたいですか?

また

-- これらの属性が与えられたキーのみを生成してよろしいですか?

于 2009-11-18T17:03:08.170 に答える
2

同じキーを生成するために同じ属性が必要な場合は、すべての属性を文字列に連結し、ハッシュを計算して最初のビットSHA1をトリムします。96

これは一意であるとは限りませんが50%、ハッシュ衝突の確率は3.3E+14十分すぎる値になります。

これが必要ない場合は、単に surrogate を使用してIDください。

于 2009-11-18T17:20:32.457 に答える
1

うーん..どの DBMS ですか?

とにかく、前述の文字列を UUID MySQL 関数の結果と連結し、結果に対して CRC32 関数を実行します。

次に、最初の 12 文字を引きます。

于 2009-11-18T17:02:08.693 に答える