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

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

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

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

Q&A

解決済

2回答

228閲覧

テーブル設計時のデータ型について

syoco0330

総合スコア30

MySQL

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

0グッド

0クリップ

投稿2021/09/12 12:40

編集2021/09/12 12:41

テーブル設計についての質問です。

言語:Python 3.7
SQL:MySQL 5.7

Pythonにてデータ取得をして、MySQLのデータベースにデータを格納したいのですが、取得する数値が、「円」のときと「%」のときがあります。
そのときの数値列のデータ型は何にしたらよろしいでしょうか?

それぞれの範囲↓

  • 円の場合の範囲は 0.0~99999円
  • %の場合の範囲は 0.0~300%

最終的なテーブルの形↓

数字列円or%列
1000.5
5.5%
95000
10000
20.5%

上記が難しい場合、下記で考えています。

数字列円or%列数字列円or%列
1000.5
5.5%
95000
10000
20.5%

テーブル設計においてどのようなテーブル設計をするのがよいのでしょうか?
ご教授頂けますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

その「%」が何に対する割合なのかわからないけど、単位が「円」と「%」のものを同じカラムに格納しようとしているのなら、それは明らかにバッドノウハウ。

素直にテーブル分けるのが普通。

投稿2021/09/12 13:05

gentaro

総合スコア8949

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

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

syoco0330

2021/09/13 01:59

コメントありがとうございます。 同じカラムに入れないような設計にします。
guest

0

ベストアンサー

テーブル設計の基本で、1つの列には同じ1つの意味のデータしか持たせてはならない、って掟があります。2種類のデータを持たせたいなら率直に2つの列に分けます。

汎用機からオープン系への移行で複数の意味のデータを汎用機と同様に同じ列のまま移行することに執拗に執着する人が多くて、実際にSQLを書くとこんなに複雑でパフォーマンスが悪くなりますよ、って説明しないといけないことが多くて結構苦労します。

投稿2021/09/12 15:15

Orlofsky

総合スコア16415

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

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

syoco0330

2021/09/13 02:01

>1つの列には同じ1つの意味のデータしか持たせてはならない コメントありがとうございます。 とても分かりやすい解説でした。 分けて設計いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問