質問: ``` ユーザ毎に電話番号を登録します。 ユーザは複数の電話帳を登録できて、上記の登録済みの電話番号を電話帳に登録できます。 電話番号は、複数の電話帳に登録が可能です。 ``` としたい時のテーブル設計で悩んでいます。 今のところは、電話帳テーブルのユニークなIDをtag的に電話番号に付与しようと思っています。 ただ、そうすると、tagカラムの文字列長が気になっちゃったり、CLOB使うか?とか思っちゃったり、悩みどころが多くて困っています。 もちろん電話帳から電話番号を絞りこんだりしたいです。 イメージ的には、スマホなどのアドレス帳で、1つの連絡先に複数のグループを指定できるというのが近い感じだと思います。 こういう多対多のようなデータ設計って、どうしてやるのが良いんでしょうか? 今回以外でも似たような状況があったんですが...その時は紐付けテーブル(電話帳と電話番号を結び付けるだけのテーブル)が用意されていました。
回答: もし私が実装するなら、ユーザーは複数の電話番号を持てるのかどうか、仕様確認すると思います。 複数持てるとするならば、「ユーザー、番号、電話帳」の3つが実体を持つデータで、それぞれを中間テーブルで繋げば良いのかと思いました。 !画像の説明をここに入力