0

データベースの問題に頭を悩ませようとして問題が発生しました。学校入学制度の状況は以下のとおりです。

表1:学校CREATE TABLE学校(schoolID auto_increment、school_name varcharなど)

表2:学生CREATE TABLE学生(studentID auto_increment、student_name varcharなど)

表3:登録(問題はここにあると思います)CREATE TABLE登録(enrolID、...)

問題は、以前のシステムの範囲は、いつでも任意の数の場所から登録を許可することであり、データベースに挿入するだけでした。これは問題なく、すべてが自動インクリメントされました。

報告が行われるとき、彼らが登録を取得したとき、登録の数が散らばっていたという事実が気に入らなかったので、範囲が変更されました。彼らは、各学校の登録IDを順番に並べることを望んでいました。

私が持っていた1つの考えは、オプション(a)でした

すべての学校の登録テーブルを作成します(合計で約1000〜1500の学校を参照)。このようにして、挿入されたすべての登録が順番に保存されます。

オプション(B)

その学校に挿入された「lastrecord」を記録する別のテーブルがあります。

CREATE TABLE lastrecord(schoolname varchar、nextrecord int)

これにより、すべての挿入のに、データベースをチェックして、その学校で使用された最後のIDを見つけ、値を取得して+1し、登録テーブルに挿入する必要があります。

この方法を使用すると、登録IDの前に学校IDを付けます(例:schoolID:100)

新規登録ID:45人目の学生の場合は10045。

次に、挿入するたびに、使用したレコードでそのテーブルを更新します。これは非常に非効率に思えますが、私はより良い解決策を見つけるのに苦労しています。

よろしくお願いします。

4

2 に答える 2

0

データベース テーブルの主キーには、実際の意味はありません。行をIDentifyするだけです。したがって、テーブルの学生 ID (意味がある) と主キー (意味がない) を 2 つのフィールドに分割する必要があります。

主キーは自動生成されます。学生 ID の生成には、year.number などの意味を持つアルゴリズムを使用できます。どの ID を付与するかを追跡する別のテーブルを作成します。

于 2012-09-05T12:20:08.237 に答える
0

2 つのフィールドで自動インクリメントを行うことができます

同様に: ADD PRIMARY KEY (school_id ,enrolID) を設定し、enrolID をautoincrement に設定します

次に、各学校には独自の自動インクリメントがあります

于 2012-09-05T12:22:32.247 に答える