- 締切済み
1対多の場合のデータベース設計
データベースの設計段階で、1対多となる場合、どういうデータベース設計をすれば良いのか分かりません。 具体的に例として挙げれば、ショッピングサイトがあるとします。 その中で、1つの商品があります。 1つの商品には1つの名前、1つの価格など、1対1のものがありますが、中には購入履歴など、1対1ではなく、1対多のものがあります。 この場合、その気になれば100でも1000でも増えていきます。こういった、項目の数が具体的に決まっていない場合、どういうデータベースの列を作成すれば良いのでしょうか? 多くても大丈夫なように、購入履歴1という列から購入履歴1000という列まで1000列用意するしかないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>なるほど、では1対多になる場合、多になるものを新たなテーブルとして >分離するということでよろしいでしょうか? データベースの基本を理解していませんね。 「正規化」というキーワードで検索してみてください
- chukenkenkou
- ベストアンサー率43% (833/1926)
購入履歴は、購入者の情報を管理する場合に必要な情報では? 商品の情報なら、販売履歴でしょうね。 「表名(列名1、列名2、~)」で、表とその列構成を表すとすれば、例えば以下のようにします。 商品テーブル(商品コード、商品名、・・・) 販売履歴テーブル(商品コード、通番、販売日、・・・) 販売履歴を検索する場合は、商品と販売履歴を商品コードで結合して結果を得られます。
お礼
回答ありがとうございます。 >商品の情報なら、販売履歴でしょうね。 そうですね(^^;; ご指摘ありがとうございます。 なるほど、では1対多になる場合、多になるものを新たなテーブルとして分離するということでよろしいでしょうか? たとえば、楽天やamazonなど、1つの商品に対して、複数のレビューがある場合は、商品テーブルとは別に、レビューテーブルを作成して、商品コードが一致するレビューをその商品ページに表示させるという処理になるのでしょうか?
補足
回答ありがとうございます。 正規化を調べてみましたが、具体的に解決策を思いつくまで理解を得られませんでした。 1対多を分離しないのであれば、不確定なものはどういった具合に列を設ければ良いのでしょうか?