テーブル設計について考えてみる

■やりたいこと

・商品をもつ

・商品はユーザがみているデバイス(PC、スマホ、フューチャーフォン)にって表示・非表示などをきりかえる

・さらにCMSぽく?したいので同じプログラムで3サービス別々の商品にきりかえる

mysqlつかう

 

商品数=30万件

サービス種=3種(サービス1〜3)

デバイス種=3種(PC、スマホ、フューチャーフォン)

 

■案1

・商品テーブル

商品ID(PK)

商品名とか

 

・商品出し分けテーブル

商品ID(FK)

サービスID(サービス1、サービス2、サービス3とか)

デバイスID(PC、スマホ、フューチャーフォンとか)

販売開始日とか

 

この場合のレコード数は30万*3*3でマックス270万レコードが必要。。。

 

■案2

・商品テーブル

商品ID(PK)

商品名とか

 

・商品出し分けテーブル

商品ID(FK)

サービス1のPC用販売開始日とか

サービス1のスマホ用販売開始日とか

サービス1のフューチャーフォン用販売開始日とか

サービス2のPC用販売開始日とか

サービス2のスマホ用販売開始日とか

サービス2のフューチャーフォン用販売開始日とか

サービス3のPC用販売開始日とか

サービス3のスマホ用販売開始日とか

サービス3のフューチャーフォン用販売開始日とか

 

この場合のレコード数はマックス30万レコード

けどサービス増やしたり、レコードふやすたびにカラム追加。。。

 

■案3

商品テーブル

商品ID(PK)

商品名とか

 

・商品出し分けテーブル(サービスごとに別データベースにする)

商品ID(FK)

デバイスID(PC、スマホ、フューチャーフォンとか)

販売開始日とか

 

案2は難しいかな。。。

 

個人的には案3なんだよなー。

サービスごとに異なる部分だけ別DBにして、共通な部分は共通DB的な。ジョインとかもきにしなくてはならなくなるはなるのだけど。。。

 

案1が一般的?な気がしないでもないけど、テーブルの種類も増えるとレコード数も増える。のでクエリのチューニングも必要になってきそうだし。。。

 

まーやりたいことしだいなのだけど。