![](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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのテーブルデータを一気...
-
Accessでデータシートに同じデ...
-
MS Accessの列と行の入れ替えを...
-
Accessでの稼働日数計算の方法
-
このISAMでは、リンクテーブル・・
-
処理の途中で停止させ、再開さ...
-
テーブルで一番古いレコードだ...
-
Access VBAからエクセルに出力...
-
Access(MDB)の複製(レプリケー...
-
ビューのソートについて
-
Oracleで上書きImportはできま...
-
ユニオンクエリで複数ファイル...
-
accessでレコード更新直後の反...
-
クエリとパススルークエリを作...
-
マテリアライズドビューとスナ...
-
SQL文のEXISTSについて
-
ACCESS2003でメニューバーを作...
-
MS Accessを共有した際にファイ...
-
【mysql : HTML】チェックボッ...
-
アクセス レコードセットを更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
アクセス レコードセットを更...
-
Oracleで上書きImportはできま...
-
テーブルで一番古いレコードだ...
-
このISAMでは、リンクテーブル・・
-
ビューのソートについて
-
SQLです教えてくださいお願いし...
-
accessでレコード更新直後の反...
-
構文エラー : 演算子がありませ...
-
マテリアライズドビューとスナ...
-
結合テーブルでINSERTする方法...
-
Accessでの稼働日数計算の方法
-
ERROR1062:Duplicate entry.......
-
同一テーブルのデータを参照し...
-
処理の途中で停止させ、再開さ...
-
重複クエリを使ったデータ削除
-
Accessでレコード削除ができな...
-
MS Accessを共有した際にファイ...
-
IF NOT EXISTを使用するINSERT文
おすすめ情報