2016-11-01 3 views
0

データベース内の従業員の一意の識別子を作成したいと考えています。これはデータベース全体の重複を避けるためです。つまり、従業員BarbraがDB1に格納されている場合、 DB2で。データベースネットワーク上のMySQL UIDシステム

私の最初の考えは、従業員の電話番号からハッシュ(例:SHA-1)を使用することでした。 このようにして、衝突の可能性は非常に低く、値は一意になります。

しかし、UIDのサイズ、ソートされた構造体とデータ型(VARCHAR)の不足のために、UIDがUIDにSELECTなどのクエリを実行するための追加リソースを必要とすることはわかっています。

誰もこの問題の解決方法について考えていますか?

+1

'UUID()'関数で 'trigger'を挿入する前に、あなたがしようとしました – Lars

+0

? – topshot

+0

あなたの質問は明確ではありませんあなたの従業員はすべてのデータベースに定義されていますか、たとえば各部門に定義されていますか?独自のデータベースを持ち、従業員がいますか? – FDavidov

答えて

1

sha1誕生日からは、人々は同じ誕生日を持つため、ハッシングアルゴリズム自体の潜在的な衝突に関係なく、衝突を得ることができます。入力の範囲は限られています(誕生日)。各データベースはdb_idは、データベースの場所の数字の一意の識別子である(id, db_id)で作られた複合主キーを実装することができauto_increment_offset

  • 各データベースを実装することができ

    • は、いくつかのオプションがあります。

    • あなたはUUIDを使用することができますが、これはコストがかかりますが、これが実行されているデータセットのサイズとハードウェアがなければ何かを想定するのは時期尚早です。 UUIDはすぐに問題を解決します。あなたは簡単にあなたの固定幅と低宇宙フットプリント(例えば、与えbinary(16)列にUUIDを保存することができます。select unhex(replace(uuid(), '-', ''))

  • 関連する問題