質問: データベースの1要素に複数データを格納したい 顧客管理データベースシステムを作成しようとしているのですが、 データベースの要素に複数データが入る場合の管理方法が 分からず困っています。 一例を挙げると、複数の電話番号を持つ人にも対応するように データベース設計をしようとした場合、どのようにするのが ベストなのかが分かりません。 電話番号1,電話番号2といったような要素を用意して、 データベースを検索するときには両方を参照する以外に 手は無いのでしょうか? それとも顧客番号と複数電話番号検索用idのようなものを対応させ、 電話番号データベース(電話番号id、電話番号1、電話番号2、電話番号3) のようなものを用意することで調べるのでしょうか? 正直、どちらもデータベース要素が3つ以上の場合に融通が利かなかったり まだるっこしい感じがしたりするのですが、代替手段を良く知りません。 何か良い方法ございましたら、ご教示願えませんでしょうか?
回答: 検索で困っている、ということでしたら テーブルを増やすのでなくて、項目1つ「検索電話」準備するのみ。 電話1、電話2、電話3・・・・・ を 電話1、電話2、電話3・・・・・、検索電話 電話xは5つくらいあれば十分では?。 「検索電話」には、 「電話1」「電話2」「電話3」・・の連結文字列、 電話1=1111111111 電話2=2222222222 電話3=3333333333 なら 検索電話=#1111111111#2222222222#3333333333#xxxxxxxxxx#xxxxxxxxxx#・・・ 検索電話の1項目だけで検索できますし顧客を特定できます。 電話1が変わっても検索電話の値更新は楽ですし、 市外局番だけでも検索はできます。 電話無、電話1しかない、電話5つある、でも対応です。 「#」は使われない文字を使う。仮の区切り文字。 とある1顧客で管理したい電話、またその検索の仕方、 とある1電話で管理したい顧客、またその検索の仕方、 1:1なのか1:nなのかn:nなのか、 こういうこと考えていけば、構造が見えてくるのではないでしょうか。 テーブルa 顧客あ、電話1=1111111111、電話2=2222222222、・・・・ を テーブルb 顧客あ、電話1=1111111111 顧客あ、電話2=2222222222 顧客あ、・・・・ とするのも面倒です。 例えば、同じ系列の顧客で電話番号が同じで良い、となった場合、 顧客あ、電話1=1111111111 顧客あ、電話2=2222222222 顧客あ、・・・・ 顧客い、電話1=1111111111 電話を検索して複数顧客が結果に出るようだと単票フォームでは表示面倒です。 単なる情報として持っていたいだけなら電話番号テーブルを作るほどではないのでは?。 管理が面倒になるだけなので、 別テーブルでjoinしたりさせなくてもいいと思います。