0

IDがMまたはIで始まり、その後に7桁の数字が続く学生用のテーブルを作成する必要があります。1つのフィールドで文字MまたはIを選択し、2番目のフィールドを7桁にして、テーブルを作成することを考えました。次に、それらを使用して複合主キーを作成します。しかし、それが私が探しているものではないと思います。学生証の欄を1列お願いします。

これは私がこれまでに持っているものです:

   create table student(    
       student_id_first ENUM('M', 'I')  
       , student_id_digits  char(8) not null    unique  
       , first_name varchar(50)
       , last_name   varchar(50)    
       , Primary Key(student_id_first, student_id_digits)   
    )   ;

考え?

ありがとう。

4

2 に答える 2

1

データベース層にデータ検証を入れるべきではありません。また、不要なオーバーヘッドを追加する複合キーも作成しています。ある時点でルールを調整または緩和する必要がある場合は、データベース スキーマを再定義する必要があります。

これにより、データを取得して実際の学生識別子を組み立てる際に、無意味な複雑さも生じます。それらを分割する非常に正当な理由がない限り、それらを一緒に保管してください。

1 つの列を使用するだけで、そこにあるものをアプリケーションに適用できます。非常に基本的な ORM でさえ、これを行うことができます。

于 2012-08-29T01:51:13.660 に答える
0

ここでの最も簡単な方法は、フィールドを定義しid char(8)てそれを主キーにすることです。

開かれた質問 (教師が尋ねるかもしれない質問) は、「不正なソフトウェア クライアントが、ID 値のビジネス ルールに準拠しない 'K1234567'、'DEADBEEF'、または 'I123' などの ID を挿入するとどうなるか」です。 ?」

この質問に対するあなたが教師に与える有効な回答は次のとおりです。

  1. 本番環境であれば、ソフトウェア クライアントをテストして、このようなことが起こらないようにします。
  2. 毎日本番パージ プロセスを実行して、不正な ID 番号を持つ行を削除できます。
  3. 一体何が欲しいの?これは、2 単位時間のクラスの 1 週間の宿題です。ほとんどの給与システムと同じくらい優れたスキーマを既に提供しました。

真剣に、あなたの最初の質問からは、この特定のビジネス ルールを強制する dbms スキーマを設計するように教師が主張しているとは思えません。しかし、それが事実かどうかはあなただけが知っています。

于 2012-08-29T02:45:19.023 に答える