• 締切済み

ショッピングサイトのテーブル設計について

練習でショッピングサイトを制作しています。 このサイトでは会員サービスもありますが、会員登録せずに商品を購入することもできます。 会員の場合、受注テーブルに会員コード(会員を一意に表す)があれば、それを元に会員テーブルから発送に必要な情報を取り出すことができます。 しかし非会員は会員テーブルに情報がないため、発送に必要な情報が別途必要になります。 非会員の情報はどこで管理するべきでしょうか?

  • MySQL
  • 回答数2
  • ありがとう数0

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

>会員の場合、受注テーブルに会員コード(会員を一意に表す)があれば、それを元に会員テーブルから発送に必要な情報を取り出すことができます。 典型的なダメな設計の例ですね。 この分では、受注テーブルとやらに商品IDと数量でも持たせた上で、リンクでデータを引っ張ってきている設計になっているのではないでしょうか? そうなっていたら、ダメダメダメの100乗ですね。 DBを設計する場合、リレーショナル(リンク、リンケージと呼称する場合もある)させなければならないデータと、リレーショナルさせてはいけないデータの区別が大切です。 設計ルール1:『お客様の目に触れる書類はリレーショナルさせてはいけない』です。 過去データを確認したい場合、過去データを再発行したい場合にどうするのでしょう? たとえば、宅配伝票を汚してしまい再印刷の必要があるとしたら? ユーザがその途中で住所を変更したとしたら、受注時とは別の住所へ発送するという事になってしまいます。 もし商品テーブルともリンクで繋いでいたら、商品金額を変更した場合、受注時の金額と違う金額をユーザーに請求するような事になってしまいます。 書類を出力(この場合は発送伝票や納品書)するという事は、再度まったく同じ書類を出力できるように、データをリレーションで引っ張ってくるのではなく、テーブルに固定データとして登録しなければならないという事です。 それが設計ルール1。 上記を踏まえると、受注テーブルに発送先の住所、郵便番号、宛名、電話番号が必要となるのは当然。 それなら、非会員ならどうデータを登録すればなどと悩む必要など存在しない。 また、どうせ登録内容を増やすなら自宅に送付のみだけではなく、贈答用に届け先を別途入力可能にすることも、発注者(贈り主)の入力も可能にするなども考えられる。 業務の流れは書類の流れなので、書類ベースでシステムを設計すれば必要なものが見えてきます。 宅配便の発送伝票を眺めるだけで、希望のお届け日、希望のお届け時間が必要だなどという事も判ります。 これは設計ルールというよりも、コツでしょうかね。

回答No.1

>テーブル設計について これはテーブル設計の範疇ではない。システム設計とか、アプリ設計のレベル。 よく仕事でも、ミッションとかタスクとか、特別チームとか何とか班などと、定期の物と、不定期の物を区分けします。これをシステムに取り入れると、 コマンド、ジョブ、etc なんて特定の処理をするルーチンなり、クラスなり、コマンドを作ります。 買い物をするジョブですね。そうするとコンピューター的には、1つのジョブに一つのIDをつけるわけですね。そのジョブをIDで管理するわけです。お客様には、このIDを、買い物ナンバーとかよんで、メールで送っているはずです。このナンバーと内部で管理するIDは同じでも違っていも言い訳です(設計による)。 と言うことは、そのジョブには、何が在るかといえば、 品物名前、数、値段、小計、合計、消費税、送料、重量、注文日、届け先、発想手段(運送やの名前など)、etc がお客様から見えるデータですね。バックでは、 在庫状況、入手先、発注状況、入予定日、着荷日、発送日、原価、売価、etc が同じジョブIDで管理されます。 これらは違うテーブルから呼び出されて、ジョブIDと言う仮想テーブル(実際にあっていもいいが)に全て埋め込まれます。 つまり、この仮想テーブルに、会員だろうが、スポットの客だろうが、住所、名前が、入るわけです。会員はただ、その仮想テーブルに入れる情報を最初からもっていることと、そのジョブIDのデーターを、顧客DBのなかで保持できることになります。 上記が、一つのシステム設計です。他にもいろんなやり方あるかと思います。

関連するQ&A

  • テーブル設計について

    会員制の小さなサイトを運営しています。 会員は会員IDで管理しているのですが、テーブル設計が適切であるか判断できず、助言を頂きたく書き込みさせて頂きました。 現在、会員情報テーブル(info)というテーブルが全ての基本となっています。 このテーブルには、会員IDの他、名前や性別、住所、自己紹介文などほとんど全ての会員情報が含まれています。 このほかに会員同士の交流用のテーブル(koryu)がいくつかあり、 そこには、会員IDとその会員が行った内容が記録されています。 で、現状、交流用テーブルを使用する場合、常に会員の名前を会員情報テーブルから引っ張ってきており、これが、処理的に重いのでは無いか、と思っています。 以下はたとえばの例ですが、  select koryu.id, info.name, koryu.contents from info,koryu where koryu.id=info.id のように、毎回、(ほぼ)名前だけを引っ張ってきています。 引っかかっているのは、この「名前だけ」というところで、例えば、会員IDと名前しかないテーブルを作成すれば、もしかしたら、処理が軽くなるのでは・・と思っているのです。 20カラムあるテーブルと関連付けを行う場合と、2カラムのテーブルと関連付けを行う場合、 2カラムのテーブルのほうが、処理は軽くなるのでしょうか?また、軽くなる場合、そうしたほうが良いのでしょうか? (現在、1000名くらいしか会員がいないため、処理が重いということは無いのですが、 安いサーバを使用しているため、処理はなるべく軽くしておきたいと思っています。) よろしくお願いします。

    • ベストアンサー
    • MySQL
  • テーブル設計について教えてください。

    会員サイトでは10個の資料を掲載しており、 会員の方が資料を開いた際にその会員は資料を確認済みという情報を DB上で管理を行いたいのですが、どのようにテーブルを設計したらよいか ご教示いただきますようお願いたします。 視聴済みの判断としては現在から90日以内に1回以上資料を開いた場合としたいです。

  • ショッピングサイトの設計/開発において

    今努めている会社で新たに商品の販売サイトを設けようと思っています。 以前にhtmlなどの言語で特に動きのないHPは作成したことがありますが、今回設けようと思っているサイトはショッピングサイトである為、いろいろな機能が必要になってきます。 主な機能としては、 ・注文フォーム ・会員登録(いずれやりたい) などがあります。 有料でそういったサービスを提供している会社もあるかと思いますが、徐々に機能の追加など行っていきたいので、基本的に自社で完結するつもりです。 漠然とした質問で申し訳ないですが、今からこういったサイトを構築する上で、お勧めのプログラミング言語/方法ってどんなものがあるのでしょうか? もちろん現在のスキルで作りこめるとは思えないので、当然勉強が必要だと思っています。 当方は先ほど記述したように、htmlと、多少のaspをかじっていたのと、webとは関係なくVB系のプログラミングは多少理解しているつもりです。 今現在は方法を探している段階ですので、こんなソフトを使えばいい等アイデアだけでも提供していただければと思っています。どうかよろしくお願いいたします。

  • 大規模なショッピングサイトのDB設計について

    はじめまして。 今回、以下のような規模のショッピングサイトを構築しようと思っています。 商品数が1万点を超えます。 商品の詳細ページ、分類ページはテンプレートを用意してユーザがアクセスする度に商品データベースにアクセスしてデータを読み込もうと思っています。 この際に生じた疑問点があります。 ・1万点を一つの商品テーブルで扱う場合に、アクセスしたときにどれくらい遅くなるのかという点。このような規模の場合、どんな設計にするべきなのか?気をつけるべきことがあるのか?教えて下さい。 ・顧客数や受注伝票が多数想定されるので、いくつかのテーブルにわけようと思っているのですが、どのような分け方が一般的なのでしょうか? 使用する言語がPHP、DBにはMySQLかPostgreSQLの場合について考えています。 宜しくお願い致します。

  • テーブル設計につきまして(正規化)

    顧客情報管理サイトを作ろうと思っています。 ・非正規化  {顧客コード , 氏名 , かな名 , 性別 , 郵便番号 , 都道府県 , 市区町村 , 建物名 , 電話番号 ,  FAX番号 , 携帯番号1, 携帯メール1 , 携帯番号2 , 携帯メール2 , 顧客ランク,備考}  の列を考えております。 ・正規化テーブル  1.顧客情報テーブル   {顧客コード , 氏名 , かな名 , 性別 ,郵便番号(外部キー) , 建物名 , 電話番号 ,   FAX番号 , 携帯番号1, 携帯メール1 , 携帯番号2 , 携帯メール2 , 顧客ランク,備考}  2.郵便情報   {郵便番号(主キー) , 都道府県 , 市区町村 これ以上、正規化できないと思っているのですが、顧客情報テーブルをもっと効率よく テーブルを設計し、正規化できるものでしょうか? よろしくお願いします。

  • ショッピングサイトの運営について

    僕はショッピングサイトの管理を任されることになりました。 もともとある既存のサイトの管理ということですが、 正直言ってほとんど知識がなくて困っています。 サイトはおちゃのこネットというもので こしらえてあるようで、おもにその使い道などが分かれば、 良いというもので、凄い専門知識が必要と言う訳ではないようです。 ただ、ショッピングサイトを運営するには、 どんな知識が最低限必要なのか、 マーケティング的にはどんなことを学んだらいいのか、 全く分からない状態です。 任せる方も、そのあたりの事情を分かって、 僕に仕事を回してくれるそうですが、 やっぱり足をひっぱらないように、少しでも 勉強しておきたいのです。 そこで、ショッピングサイトの運営や マーケティングをされている方にお尋ねしたいです。 目を通した方がよい書籍やサイト、役に立ったセミナー などなどを教えて頂けませんか? よろしくお願いします。

  • ショッピングサイトのサーバーについて

    ショッピングサイトを管理しているものです。ショッピングサイトを作って頂いた方からサーバーを変更したという連絡が届きました。そのサーバーはparallels Plesk Control Panel 8.6というサーバーみたいなのですが このサーバーでは、どのようにショッピングサイトのカスタマイズをするのでしょうか? 例えば、新しい商品の追加や、商品の値段の変更などです。 ちなみに以前のサーバーはEC-CUBEでした。 いろいろとparallelsについて調べてはみたのですがこのサーバーの使い方が分かりません。 また、サーバー内のファイルマネージャからソースコードを書き換えようかとも思ったのですが、「This file is part of EC-CUBE」というコードが表示され、ソースを見ることも出来ません。 なぜかショッピングサイトを作って頂いた方と連絡が繋がらず大変困っています。 ヒントになるようなことでも教えて頂けたら幸いです。よろしくお願い致します。

    • 締切済み
    • CSS
  • ショッピングサイトのカートについて

    PHP+MySQLで制作しています。(練習) カートの情報(商品や個数など)をCookieで管理しようと思ってるのですが、 Cookie自体に商品や個数を書き込むか 商品や個数はデータベースに、Cookieにはデータベースと結び付けられるような情報(ユニークキーなど)を書き込むか どちらがいいか迷っています。 アドバイスください。

    • 締切済み
    • PHP
  • 別テーブルの計算について

    accessでショッピング状況のデータベースを作成しているのですが、「会員情報」というテーブルと「商品詳細」のテーブルがあり、商品A500円を購入する時にポイント50Pを「会員情報」のポイント欄に自動的に足したいのですがどのような計算式?(関数)を入れればよいのですか? また、ポイントで購入する時はポイント数を「商品詳細」テーブルに入力すると「会員情報」テーブルのポイントフィールドから引きたいのです。 ご教授下さい。お願い致します。

  • PDOで複数のテーブルを扱いたい

    PDOで複数のテーブルを扱いたい 現在ドットインストールというサイトで勉強しております。 http://dotinstall.com/lessons/sns_php_v2 このユーザー管理のレッスンで自分なりに応用してみようと戦っております。 これでは、ログインを行い登録したユーザーのプロフィールを表示するという内容なのですが、管理人とユーザーという風に分けてadminのテーブルに管理者を作成し登録し、登録された会員は自分のプロフィールを表示できるという流れにしたいと思っております。 レッスン通りでは問題なく出来ました。 そこで次にテーブルを分けて表示することにチャレンジしております。 users(会員テーブル)とは別にaddress(住所テーブル)を作成し会員テーブルと同じようにidカラムと住所を入れるtext項目をデータベースに作成しチャレンジしました。 サイト通りプロフィールを表示させる方法でやればこちらもテーブルを読み込ませることはできるのですが、URLの数値を変えれば当然他の人の情報も見えてしまいます。 $meというセッションで取得したいのですがusersの情報はログイン時にセッションとして受け取っているので#meで受け取りができるのですがaddressのテーブル情報にもこのセッション($me)で表示させるにはどのようにすればよいのでしょうか? やりたいことはログインした会員の情報のみ(他人のデータをみれない)表示させたい。 データベースのほかのテーブルもusersのセッションで共有したいということです。 わかりにくい説明で申し訳ございませんが、お助けいただけませんでしょうか。

    • ベストアンサー
    • PHP