2021年7月10日土曜日

プログラマですが未だプライマリーキーが把握出来ていません。お恥ずかしい話、ググってもいまいちピンと来ないです。重複しないというのは何か意味があるんでしょうか?小中学生や猿でも分かる様解説お願いします。

https://jp.quora.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%A7%E3%81%99%E3%81%8C%E6%9C%AA%E3%81%A0%E3%83%97%E3%83%A9%E3%82%A4%E3%83%9E%E3%83%AA%E3%83%BC%E3%82%AD%E3%83%BC%E3%81%8C%E6%8A%8A%E6%8F%A1%E5%87%BA%E6%9D%A5
シェアしました。

「もしもし、◯◯商事の□□と申します。そちらに山田様はいらっしゃいますでしょうか?」

「あいにくですが、当社には山田という社員は50人程在籍しています。どの山田かわかりますでしょうか?

「下の名前は太郎です」

「あいにくですが、当社には山田太郎という社員は3名在籍しております。どの山田太郎かお分かりでしょうか」

(そんなにいるのか・・・)

.

この状況で、会社員の情報を管理しているデータベースがあると仮定します。

データベースには住所が管理されているとします。

ある山田太郎さんが住所変更の依頼をしました。

このとき、他の山田太郎さんの住所を変更せず、的確に狙った山田太郎さんの住所を変更するには、どのように社員の情報を管理すればよろしいでしょうか。

また、住所変更にはどのような変更コマンドをかければよいでしょうか。

.

まず「社員名」が「山田太郎」であるレコードの「住所」を変更するというコマンドではダメだということがお分かりですよね。他の山田太郎さんの住所も巻き添えで変わってしまいます。

最後に申請した同姓同名の人の住所に会社からの郵便が全て届く事態になれば色々ヤバいため、阻止しないといけません。

.

絶対に被らないことがシステム上保証されている「社員ID」があるとします。

社員IDが依頼者と同じレコードの「住所」を変更するというコマンドを投げました。これで他の山田太郎さんの住所は変更されず、依頼者の住所のみが変更されました。めでたしめでたし。

↑の絶対に被らないことをシステム上保証する機能がプライマリキーまたはユニークキーの「重複を許さない」機能です。実際に重複するようなレコードを入れようとするとDB側でエラーになります。

検索が早いとかそういう効能もありますが、被らないことがシステム上保証されている意味は、巻き添えを避けることかと思います。

.

前提が会社への電話だったため、小中学生にはわかりづらい例で申し訳ありません。



0 コメント:

コメントを投稿