名前、父の名前、母の名前、生年月日、出生地の属性を持つ最大 12 文字の長さの一意のキーを生成するにはどうすればよいですか。
前もって感謝します :)
名前、父の名前、母の名前、生年月日、出生地の属性を持つ最大 12 文字の長さの一意のキーを生成するにはどうすればよいですか。
前もって感謝します :)
一意の識別子の主な、そして実際に唯一の属性は、それが一意であることです (考慮の範囲内で、テーブル、スキーマ、またはグローバルであっても)。このような ID に「現実世界」の値を組み込むことは意味がありません。
これらの属性が人物を一意に説明していることが確実な場合は、言及する属性に一意の制約を作成する必要があります。この属性の組み合わせが、テーブルの「自然キー」を形成します。
一意の ID は「代理キー」であり、そのテーブルとの結合で自然キーのすべての列を指定する必要がなくなる便利なハンドルです。一意の ID を取得する方法は、データベースに依存します。たとえば Oracle では、挿入トリガーと組み合わせてシーケンスを使用できます。
自然キーの一意の制約により、同じ人物を 2 回挿入することはできなくなりますが、最初にテーブルをチェックして、その人物が既に存在するかどうかを確認する必要があります。その場合は、その時点からすでに割り当てられている ID を使用してください。もちろん、これを組み合わせて、フィールドを指定すると ID が返され、ID を検索する操作が非表示になるか、新しい場合は作成してから新しい ID が返されます。
これらの列でさえ、おそらく一意であるには十分ではありません。人の名前は (結婚、選択などで) 変更される可能性があるため、通常、それを使用して一意のキーを生成することはありません。
通常、要件に応じて、自動番号/ID/シーケンスまたは UUID/GUID などのサロゲートを使用します。
これはあなたが説明するキーではありませんが、キーの代わりに使用したい短い構造化データです。おそらくもっと役立つでしょう:
-- 特定の 12 文字のキーからこれらの属性を回復できるようにしたいですか?
また
-- これらの属性が与えられたキーのみを生成してよろしいですか?
同じキーを生成するために同じ属性が必要な場合は、すべての属性を文字列に連結し、ハッシュを計算して最初のビットSHA1
をトリムします。96
これは一意であるとは限りませんが50%
、ハッシュ衝突の確率は3.3E+14
十分すぎる値になります。
これが必要ない場合は、単に surrogate を使用してID
ください。
うーん..どの DBMS ですか?
とにかく、前述の文字列を UUID MySQL 関数の結果と連結し、結果に対して CRC32 関数を実行します。
次に、最初の 12 文字を引きます。