- 締切済み
テーブルとテーブルを繋ぐユニークキーの作り方は?
Excelで以下のような表をデータベースにした場合についてお伺いします。 【Excel表】-------------------------------------- 購入日 , 店舗, 商品名1 , 商品名2, 商品名3 2014/4/1, A店, ボールペン, ノート , えんぴつ 2014/4/2, B店, ハンカチ , 洋服 , くつした ------------------------------------------------- まず第一正規形は以下のようになると思います。 【第一正規形】----------------------------------- 購入日 , 店舗, 商品名 2014/4/1, A店, ボールペン 2014/4/1, A店, ノート 2014/4/1, A店, えんぴつ 2014/4/2, B店, ハンカチ 2014/4/2, B店, 洋服 2014/4/2, B店, くつした ------------------------------------------------- 第二正規形は以下のように重複している部分を別のテーブルにします。 【第二正規形】----------------------------------- tb_purchase 購入日 , 店舗コード, 商品名 2014/4/1, 1 , ボールペン 2014/4/1, 1 , ノート 2014/4/1, 1 , えんぴつ 2014/4/2, 2 , ハンカチ 2014/4/2, 2 , 洋服 2014/4/2, 2 , くつした tb_shop 店舗コード, 店舗 1 , A店 2 , B店 ------------------------------------------------- 質問1. ここで疑問に思ったのですが、このようにtb_shopの「店舗コード」は実際にはどのようにして作成するのでしょうか? tb_shopには重複しない「店舗コード」が必要ですが、それにはAUTO_INCREMENTを使うのが一般的なのでしょうか? 質問2. 実際の挿入時のクエリーは以下のような感じで良いのですか? 1.「2014/4/3にA店で消しゴムを買った」というデータを挿入する場合 1. tb_shopで店舗カラムが「A店」となる店舗コードを取得 2. tb_purchaseに「2014/4/3, 1, 消しゴム」を挿入 こんな感じでしょうか? 2.「2014/4/3にC店で牛乳を買った」というデータを挿入する場合(1~4はそれぞれ一つのクエリーです)、 1. tb_shopで店舗カラムが「C店」となる店舗コードを取得 2. C店が存在しないのでtb_shopに挿入 3. 挿入後に「C店」となる店舗コードを取得 4. tb_purchaseに「2014/4/3, 3, 牛乳」を挿入 なんか手間が増えますが、1~3はそれぞれ別々のクエリーでやらないとダメでしょうか? 質問3. あと質問ですが、このままだとtb_purchaseは主キーがないので、購入idのようなカラムは必要ですよね? 主に聞きたい内容は上記の「店舗コード」なる、テーブルとテーブルを繋ぐコードのようなものは どのように作るのが一般的で同時挿入でも重複しないコードを作れるか?という点です。 自前でたとえば「S001, S002, …」というようなコードを作ったら、同時挿入で問題が出ますよね? 初心者的な質問ですみませんが、どうぞよろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
お礼
とても詳しくご説明頂きましてありがとうございます。 >要件定義の際に、店舗IDをどうつけるか決めるので >オートインクリメントで店舗コードを作るというのはありえない たしかにそうですね…。 自分が不安に感じていた点は、同時挿入のときに店舗コードが被ってしまう問題でした。 実は店舗はユーザーがCSVで100店舗とか、1000店舗とか、一気に挿入できるようにしています。 もしユーザーAが店舗コードS100~S300を挿入、ユーザーBが同時にS200~S400を挿入した場合、S200~S300が被ることになります。 わざわざ「S200~S300が使えません」と表示するよりも、オートインクリメントでIDを割り振ってしまったほうがユーザーに混乱を与えないと思いました。 それに、店舗コードはユーザー側には一切見せません。単純に、テーブルとテーブルを結ぶIDとしてのみ利用するだけです。 >むしろこれはありえないです >新規店舗は売上が発生する前に情報が入っているはずです 本当はそうしたいのです…。 しかし、「商品を入力すると同時に、店舗も一緒に入力するように」と依頼されています…。 >ただし1度に複数の購買が発生するのが通例ですので、「明細」の枝番を利用するのが一般的です。 ありがとうございます。 参考にさせて頂きたいと思います。 どうもありがとうございました。