web-dev-qa-db-ja.com

代理キーに問題がありますか?

私は学生管理用のアプリケーションを使用しています。学生のテーブルには、代理キー(自動インクリメントID)を使用しました。代理キーで私が直面する問題は、ユーザーが学生に関する情報を表示したいが、IDを入力する必要があるが、ユーザーは学生の名前しか知らない場合です(そして、名前を主キーとして使用することはできません。ユニーク)。どうすればこの問題を解決できますか?

1
user2080105

ここで興味深いことがいくつかあります(注:私は現在この分野で働いているので、システムの機能と要件に関してあまり深く掘り下げるつもりはありません)。

  1. データベースの内部識別子を外部に公開することは避けてください。整数IDENTITY列のフィールド値は、データベースの外部では意味がありません。彼らが行くべき絶対的な最も遠いのは、クライアント側のデータアクセス層です。

  2. 通常、学生(人)は、管轄当局(つまり教育省)によって割り当てられた一意の番号(つまり、学生番号)によって管轄内で識別されます。一部の管轄区域では、学生(人)がシステムに存在する必要がありますなし学生(人)が登録されるときに番号が同期的に割り当てられないため、一意の番号。あなたがそれに対処する必要があるかどうかはわかりません。その場合、一意の番号を持たない学生(人)は、名、姓、性別、生年月日の組み合わせなどのビジネスキーによって一意であると判断されます。ただし、誰もがデータベース内に一意の代理キー値を持ちます。これは、あなた(ユーザーではない)がレコードを一意に識別するために使用します。

  3. 学生を検索する機能を実装する必要があります。ほとんどの場合、システムのユーザーは、学生番号ではなく、名前(または名前の一部)に基づいて検索します。結果の検索では、ユーザーが「アクセスできる」学生が表示されます。たとえば、ユーザーが教師である場合、ユーザーは自分が教える生徒にのみアクセスできる必要があります。検索インターフェースでは、先に進む前に、ユーザーが1人の学生のみを選択できます(必要な内部識別子が表示されます)。

要約すると、データベース設計は正しい方向に進んでいると思います。ユーザーが学生を一意に識別できるように、フロントエンドにいくつかの追加機能を実装するだけです。

2
Jon Seigel

短編小説はあなたができないその問題を解決するということです。とにかく、みんなの満足ではありません。

ある「ジョン・スミス」を別の「ジョン・スミス」と区別するには、およびストアおよびジョン・スミスの名前以外の何かを公開することを知っている必要があります。

多くのWebサイトは電子メールアドレスを使用しています。米国の多くの政府機関は社会保障番号(SSAN)を使用しています。自動車局は運転免許証番号を使用しています。大学は学生ID番号を使用します。米国郵政公社(USPS)はあなたの郵送先住所を使用します。

たとえば、教師が生徒に関する情報を検索できるようにすることが目的の場合、生徒のID番号は教師のクラス名簿に記載されている必要があります。教師一般的に名簿に載っていない生徒の生徒情報を検索するビジネスはありません。他の管理者は、学生のIDカードを確認するように依頼できます。保護者の方には、お子様のID番号が記載された手紙を送ることができます。