20929
```

    ユーザ毎に電話番号を登録します。
    ユーザは複数の電話帳を登録できて、上記の登録済みの電話番号を電話帳に登録できます。
    電話番号は、複数の電話帳に登録が可能です。
    
```

としたい時のテーブル設計で悩んでいます。

今のところは、電話帳テーブルのユニークなIDをtag的に電話番号に付与しようと思っています。  
ただ、そうすると、tagカラムの文字列長が気になっちゃったり、CLOB使うか？とか思っちゃったり、悩みどころが多くて困っています。  
もちろん電話帳から電話番号を絞りこんだりしたいです。

イメージ的には、スマホなどのアドレス帳で、1つの連絡先に複数のグループを指定できるというのが近い感じだと思います。

こういう多対多のようなデータ設計って、どうしてやるのが良いんでしょうか？  
今回以外でも似たような状況があったんですが...その時は紐付けテーブル(電話帳と電話番号を結び付けるだけのテーブル)が用意されていました。
CC BY-SA 3.0
2016-01-14T11:04:50.747
20919
2016-01-14T14:06:57.773
2383
question
database oracle
電話帳のテーブル設計
もし私が実装するなら、ユーザーは複数の電話番号を持てるのかどうか、仕様確認すると思います。  
複数持てるとするならば、「ユーザー、番号、電話帳」の3つが実体を持つデータで、それぞれを中間テーブルで繋げば良いのかと思いました。

[![画像の説明をここに入力](https://i.stack.imgur.com/ByQnS.png)](https://i.stack.imgur.com/ByQnS.png)
CC BY-SA 3.0
2016-01-14T14:06:57.773
20929
2016-01-14T14:06:57.773
7471
20919
answer