質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

467閲覧

ECサイトをイメージしたアプリケーションのテーブルの正規化について質問です

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/06/15 11:43

前提・実現したいこと

ECサイトを模した様なアプリケーションを作っております。
商品テーブルの正規化をしたいです。

発生している問題

現状以下のようなテーブル構成になっております。

items

11 id 22 商品名 33 定価 44 在庫数 55 入荷日 66 入荷数 77 販売数

私の考えでは、1,2,3においては日々変動するようなデータではないので、商品マスタとすべきだと考えております。
4,5,6,7において、更にテーブルを分割するとなると4, 5&6, 7として分けるのが自然かなと感じますが、そこまで分割する必要があるのか?とも疑問に思ってしまいます。

更に分割すべき理由、しないべき理由があれば教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/06/15 12:09

要件次第です。 この手のものは仕様と、扱う全てのデータが揃ってようやく行えるもので、1つのテーブルだけ出して(定義も提示せずに)、他者に的確なアドバイスをもらうのは困難です。 現在ついている回答も、今回の特化したものではなく、一般的な概念を説明しただけに過ぎませんので、今回のケースに当てはまるかは分かりません。
guest

回答1

0

SQLをシンプルにパフォーマンス良く実行できるように、データベースのテーブルはデータベースの正規化 に沿って設計します。通常第3正規化まで行います。

入荷も販売も複数回あるでしょうから、
1 id
2 入出荷日(いちおう年月日時分秒まで持つ)
3 入出区分
4 入出荷数

同じSQLでもデータベースやそのバージョンによって方言が大きいですから、どのデータベースを使うのかを質問のタグで示したり、バージョンも明記した方が適切なコメントが付き易いです。SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう!

投稿2020/06/15 11:56

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/15 13:08 編集

ご回答いただきありがとうございます。質問の仕方についてのアドバイスもありがとうございます。 上記を踏まえて私の解釈を整理してみたのですが、入荷情報はトランザクションデータなので別テーブルで管理しないと入荷の回数だけ商品名等のレコードが繰り返されることになり、データに重複が生まれてしまうから別テーブルで管理する。 一方、在庫や販売数というと、テーブルにあるレコードの値を更新するだけだと思いますのでトランザクションデータではないと思います。 でも商品情報マスタは頻繁に更新されるべきではないので別テーブルに管理する。という認識であっていますか?
Orlofsky

2020/06/15 13:59

m.ts10806さんが書かれているようにもっと要件を明確にできた方が適切なコメントが付き易いです。この掲示板は書き込んだ内容を変更できます。 データに重複が生じる...から別テーブルにするという理解はあっています。 完全な1点ものなら質問のテーブルに仕入価格と販売日を追記するだけで良いでしょう。同じ品を何度も仕入れいたり、売ったりする場合は回答のようになります。この場合は現在の在庫数の把握が必要になりますから、現在在庫数や最低在庫数を持って、在庫数が最低在庫数を切ったら仕入れを促す機能が欲しいです。仕入れ毎に価格が変わることがあり得るから仕入れ価格は回答のテーブルに追加した方が良いかも?COVID-19の流行で需要も供給も大きくかわるっても対応できないシステムでは使い物にならないから、販売価格も販売毎に持った方が良いかも? 缶ビールのように同じ商品でも箱で仕入れて、バラで売ったり、6缶パックで売ったり、箱で売ったりするとまた別のテーブル設計を考えなくてはなりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問