![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
朝からデータベースの設計について悩んでいます。
テーブルにしたいデータがあるのですが、
それぞれカテゴリーが違うデータがあります。
構造的には少ししか違わないのですが、
これらのデータを1つのテーブルとしてまとめるか、
それとも、それぞれ1つずつのテーブルにするか迷っています。
迷っている理由として:
・同時にアクセスがあった場合、全て一つのテーブルにまとめていると、障害がないか?
・全てを1つのテーブルにすると、多少は構造が違うので、必要のないフィールドが出てしまう。
それぞれを1つのテーブルで分割するということも考えたのですが、
例えば、全てのデータからある特定のデータの検索をかける場合に
不都合なのではないか?と考えてしまいます。
こういう場合には:
select * from table_A where field="検索したいデータ";
select * from table_B where field="検索したいデータ";
select * from table_C where field="検索したいデータ";
とテーブルの分だけSQLを実行するしかないのでしょうか?
どちらを選択しても、それぞれ一長一短のようで、混乱しています。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
候補としては4つぐらいあるでしょうか?
1)すべて別テーブル
2)1つのテーブルで固有項目を全て別の列で持つ
3)1つのテーブルで固有項目を固有項目1~として持ち、取り出してから加工
4)共通項目を1つの親レコードのテーブルとして持ち、固有項目を子レコードとして複数テーブル持つ。
おなじ意味合いの項目を検索すると言うことがあるようですから1)は無しですね。
ちょっとMySQLの仕様がわからないので微妙なんですが可変長な文字列(OracleでいうVARCHAR2など)データが格納されていないときに、あまり容量を取らない方であれば2)でもあまり問題ないかと思います。
3)の場合は容量は取りませんが固有項目に何が入っているか取り出したあとに型変換が必要になる可能性もあります。
私なら4)で共通の親テーブルと固有カラムごとの子テーブルを作ります。
共通の横断検索を行うときは親テーブルのみを検索するだけですし、データベースの拡張、固有項目や共通項目のカラム追加時のシステム影響度も少ないです。
システム構成の変更時もトラブルが少ないと思います。
ただし親と子を同時に更新する必要がある場合はトランザクション処理の考慮が必要です。
No.2
- 回答日時:
あまり具体的ではないので、的確な回答はできませんが、
例えば、
テーブル1が
ユーザーID|ユーザー名|データ1|データ2
で
テーブル2が
ユーザーID|ユーザー名|データ1|データ3|データ4
くらいの違いならば
リレーションを考えて
テーブル1
ユーザーID|ユーザー名
テーブル2
ユーザーID|データ1|データ2
テーブル3
ユーザーID|データ1|データ3|データ4
としたほうがすっきりするのではないかと思います。
取り出す場合は
select * from テーブル1 left join テーブル2 on テーブル1.ユーザーID = テーブル2.ユーザーID;
のようにすればいいかと思います。
(やり方によっては3つや4つのテーブルを結合させることもできます)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
SQLです教えてくださいお願いし...
-
Accessのテーブルデータを一気...
-
Oracleで上書きImportはできま...
-
ODBC接続で新しいレコードを追...
-
SQL文の結合(一対多)がわから...
-
アクセス レコードセットを更...
-
このISAMでは、リンクテーブル・・
-
処理の途中で停止させ、再開さ...
-
住所のDBテーブル、マスターの...
-
Accessの処理速度を速めるため...
-
ビューのソートについて
-
マテリアライズドビューとスナ...
-
重複クエリを使ったデータ削除
-
ユニオンクエリで複数ファイル...
-
「クリップボードにコピーされ...
-
SQLです教えてください。
-
オーダーの覚え方について
-
SQL、2つのテーブルで条件一致...
-
テーブルに存在しない列をselec...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
このISAMでは、リンクテーブル・・
-
Oracleで上書きImportはできま...
-
アクセス レコードセットを更...
-
構文エラー : 演算子がありませ...
-
処理の途中で停止させ、再開さ...
-
ビューのソートについて
-
accessでレコード更新直後の反...
-
結合テーブルでINSERTする方法...
-
同一テーブルのデータを参照し...
-
ACCESSで容量が50MBになった...
-
マテリアライズドビューとスナ...
-
Accessのインポートについて(上...
-
MS Accessを共有した際にファイ...
-
「クリップボードにコピーされ...
-
重複クエリを使ったデータ削除
-
ERROR1062:Duplicate entry.......
-
access 特定のレコード数までエ...
おすすめ情報