私は、パターンに基づいた一意の 13 桁の ID (ユニバーサル一意 ID ではなく、データベース内) を生成する必要がある学生データベース プロジェクトに取り組んでいます。
パターン
パターンは次のようになります: 最初の 4 桁は州コード、次の 2 桁は学生の入学年、残りの 7 桁は単純なシーケンス コード (例: 01031150000001) です。
問題
シーケンス番号は州コードや入学年とは無関係でなければならないため、mysql の自動インクリメント機能を使用できません。
明確にするために、州 A=0101、州 B=0102、州 C=0103 の 3 つの州コードしかないと考えて、2015 年の ID を生成すると仮定すると、2 桁の年コードは 15 になります。
ここでの問題は、州 A で入学を許可された最初の学生には 0101150000001 として ID を取得する必要があることです。同様に、州 B の最初の学生には ID 0102150000001 を割り当て、州 C の最初の学生には ID 0103150000001 を割り当て、これらのシーケンスを続行する必要があります。この順序で、他の状態とは独立しています。
この問題は、毎年シーケンスを再開しなければならないという事実によっても複雑になります。たとえば、2016 年の州 A の最初の学生は、ID 0101160000001 を取得する必要があります。さらに混乱させるために、過去の学生の記録がランダムにデータベースに入力されます。つまり、入学日が2015 年であり、そのようなエントリの後に入学日が 1998 年の学生が続き、さらに入学日が 2014 年の学生が続く可能性があります。
私が言おうとしているのは、データ入力は年ごとにソートされないため、毎年自動インクリメント フィールドをリセットする方法がないということです。
毎年の各州のシーケンスは、開いたままにするか、永久に継続する必要があります。
州ごとに年ごとに個別のID生成テーブルで管理できますが、そのようなタイプのIDを効率的に生成および管理するより専門的な方法があるかどうか疑問に思っていました????
私はすでにあなたのフォーラムとGoogleで検索しましたが、関連するものは何も見つかりませんでしたので、重複としてマークしないでください. ありがとう。ちなみに、MySql と PHP で実装する必要があります。
構造
現在、学生のデータをテーブルに保存する必要があります。ID、名、姓、住所、親子関係などの属性があります。学校やその他のエンティティ、およびそれらの間の関係に関するデータを含む他のテーブルがあります。すべて揃っています。問題は ID だけです。この目的のために、信頼できる ID 生成アルゴリズムが必要です。同じ秒間に何千ものエントリが同時に作成されたとしても、アルゴリズムは 2 つの類似した ID を生成することは決してありません。