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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

3回答

1925閲覧

MySQLで列が不定な場合の設計について

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2016/12/07 09:12

以下のようなcsvデータがあるとします。

販売日,商品名,価格,原価,運送費,梱包代
20161210,りんご,200,100,50,30
20161205,みかん,100,100,30,20
20161201,バナナ,350,150,80,40

このようなCSVのデータを格納するテーブルを作るには「ID,販売日,商品名,価格,原価,運送費,梱包代」の列を作ればいいことはわかるのですが、この列が不定の場合どのようなテーブル設計にすればよいでしょうか?

例えば現状は

販売日,商品名,価格,原価,運送費,梱包代

の列だけでいいとします。
しかし今後この列が

販売日,販売時間,商品名称,販売メーカー,価格,原価,配送費,梱包代,広告費

となった場合、テーブルを設計し直さないといけなくなります。
上記の変更は、

・カラムが増えた
・カラム名が変わった(運送費→配送費のように)

ただし列が変わった場合でも過去のデータはそのまま維持しておきたいです。
このような考え方が初めてなのでどのように設計すれば良いのかわかりません。

お手数ですがアドバイスをお願い致します。

開発環境:MySQL5.6

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

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

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

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

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

guest

回答3

0

どういうデータを管理するか、他テーブルとのデータの関連の仕方などで状況は変わりますが、質問内のテーブル構造なら「変更が必要な状況になったら、その都度ALTER TABLEなりで変える」でいいと思います。

後から追加するカラムは別テーブルに保持して、主キーで1対1の関係になるようにして外部結合で持ってくるというやり方も出来なくはないですが、正直無駄かと思います。

投稿2016/12/07 09:40

hitsujimeeee

総合スコア486

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

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

0

そもそもSQLでは列名にそれほど意味はありません
参照の際にカラム名 AS 別名で適当な名称をつけることが可能ですので
なるべく普遍的な英数字でつけておくことをお勧めします

投稿2016/12/07 10:03

yambejp

総合スコア114839

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

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

0

一般的に列の追加・変更は、余計なデータ更新なしで(既存のデータを壊さずに)行うことができますから、とりあえずは問題ありません。(SQL の ALTER TABLE 文を調べてみるとよいでしょう)
※列名を変更するとプログラムに影響しますから、列名を追加はしても変更はしないのが普通

むしろこの場合、データベースのテーブルをどう設計するべきか、という点に重点を置くべきです。将来的に ALTER TABLE をしなくてもよい設計も考えられます。
例えば諸々の費用をすべて「諸費用」ととらえてるなら、諸費用IDとその名称を保持する「諸費用マスタ」というテーブルに分離しておけば、名称変更があってもマスタの1レコードを更新するだけで済みますよね。
売上とのリンクは、売上のIDと諸費用IDと諸費用の金額を保持するリレーションテーブルがあればいいわけです。

が、どういう設計になるかは要件定義および性能要求にも絡みますから、いろいろ悩むところです。

投稿2016/12/07 09:48

tacsheaven

総合スコア13703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問