• ベストアンサー

日付をカラム格納せずテーブルとして作成しても良い?

SQLite3なんですが、日付データをカラムへ格納せず、日付毎にテーブル作成してデータを格納しているコードがあるのですが、これは一般的なやり方なのでしょうか? ・一般的なやり方 ・一般的なやり方ではない ・一般的なやり方ではないが、アプリ内容(仕様)によっては普通に起こりうる ■質問背景 ・日付はカラムへ格納するものとばかり思っていました ・ちょっとびっくりしたので、質問してみました

  • re97
  • お礼率80% (601/744)

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

あまり良い設計とは言えませんが、性能的な要請が厳しく、他の手段(後述のパーティショニング等)も無くて、そうせざるを得ない場合は有るでしょうね。 ということで、「一般的なやり方ではないが、アプリ内容(仕様)によっては普通に起こりうる」になるかと。 ただし、パーティショニング機能の有るDBMSでは、それによって月や日付によって物理テーブルが分割される事は一般的だと思われます。 http://lets.postgresql.jp/documents/technical/partitioning/1 http://www.atmarkit.co.jp/ait/articles/0611/22/news141.html もっとも、この場合は日付や月などのカラムもそのまま残しつつテーブルを分割する事になるのですが。

re97
質問者

お礼

回答ありがとうございました。 >パーティショニング ・初めて聞きました ・リンク先、参考になりましたー

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

顧客や商品など、マスター系では考えにくい。 日々大量のデータが生じるようなトランザクション・ログだったら、そうかも。

re97
質問者

お礼

回答ありがとうございましたー

関連するQ&A

  • どのテーブルのどのカラム???助けて下さい

    会社に入社したばかりなのですが、プログラミングをしています。 で質問なのですが データベースのselect文で ある名称を取ってこないといけないときに どこのテーブルとどこのテーブルのどのカラムとどのカラムが 等しいときの名称を取ってくる様なselect文が作成できません テーブル設計書のカラム名を見ただけではわかりません こういった場合はどうすればいいのでしょうか 設計書とかにどのカラムが等しいときとか どのテーブルのどの名称とか普通そういう資料があるのでしょうか select文の構文は判ってもテーブルの仕様みたいなのがわからないので 対応できません 全然わかりません。助けてください

  • テーブルで一番古いレコードだけをSELECTしたい

    テーブルで一番古いレコードだけをSELECTしたいのですが、どうすれば良いでしょうか? ■背景 ・テーブルからデータを取得しようと思ったら、「id」及び「autoincrement」に該当するカラムがありませんでした ・日付に該当するカラムもありません ・「phpMyAdmin」で確認すると、いつも同じ並び順で表示されるので、格納したレコード順で表示されているのではないかと思いました ■質問 ・この時、そのテーブルで一番古いレコードだけをSELECTしたいのですが、どうすれば良いでしょうか? ・where?

    • ベストアンサー
    • MySQL
  • SQLの日付時刻のカラムから日付だけで検索したい

    こんにちは。 自分はデータベースの初心者です。 仕事で急きょ勉強しなければならなくなりました。 あるデータベーステーブルの中に日付時刻が混じったカラムがあります。 伝票のデータなんですが、伝票が作成された情報が chk_open_date_time というカラムで、実データは '2013-11-15 12:19:31.000'; と言った形になってます。 伝票を任意の作成日付で表示できないといけないのですが、ネットで見てもそこがよく解りません。 where の条件句で、2013年11月15日の伝票を出す、と言った事がしたいです。 どう言った形で行う事が出来ますか? 他のカラムで日付だけと言うのはありませんでした。 どなたか教えてください! よろしくお願いします!

  • NOT NULL制約カラムにNULLが格納される

    SQLite3でテーブル作成する際、カラムをテキスト型にして、NOT NULL制約をつけているのですが、NULLも普通にINSERTされてしまいます なんででしょうか?

  • 特定のカラムが更新されたときのみ、そのレコードを別テーブルへ格納するト

    特定のカラムが更新されたときのみ、そのレコードを別テーブルへ格納するトリガの作成方法を教えてください・ トリガ名:TEST_UPDATE テーブル名:MV_ORACLE_MV_TEST カラム名:ORAPRIME ORACHANGE ORANAME CHANGENAME 対象カラム:CHANGENAME 格納先テーブル:TRITEST_ORACLE_MV_TEST 作成トリガ: CREATE OR REPLACE TRIGGER TEST_UPDATE after update of CHANGENAME on MV_ORACLE_MV_TEST FOR EACH ROW begin INSERT INTO TRITEST_ORACLE_MV_TEST SELECT MV_ORACLE_MV_TEST.ORAPRIME , MV_ORACLE_MV_TEST.ORACHANGe , MV_ORACLE_MV_TEST.ORANAME , MV_ORACLE_MV_TEST.CHANGENAME FROM MV_ORACLE_MV_TEST where MV_ORACLE_MV_TEST.CHANGENAME = :new.CHANGENAME -- commit; commit; end / テーブルMV_ORACLE_MV_TESTのうち、CHANGENAMEカラムが変更(更新)されたレコードのみを、 TRITEST_ORACLE_MV_TESTテーブルに格納したいと思っております。 この時、他のカラムも一緒に格納することが必要でして、 (もしカラムに変更があった場合、そのカラムも変更する。変更されていない場合は元の値を格納する) そのトリガを上記のように書いたのですが、 コンパイルエラーが発生しました。 どの部分が誤っているのか、ご教授願えませんでしょうか

  • テーブル作成でカラム名で配列を

    MySQLを勉強している初心者です、よろしくお願いします。 テーブル作成時、カラム名を配列を使ってできないものでしょうか? (data1 data2 data3 data4 とするのが面倒なのですが) CREATE TABLE table_name ( code int(6) , data1[100] int(10) , data2[50] varchar(20) , data3[20] varchar(25)); ERROR 1064:You have an error in your SQL syntax. となります。 また二次元配列はどのようにしたらよいのでしょうか? よろしくお願いします。

  • Tableのカラムをボタン化するには

    テーブルのカラムをマウスでクリックするとテーブルの内容を昇順に並べ替えたり、降順に並べ替えたりできるテーブルを作成したのですが、視覚効果がないので味気なく、カラムをボタン化したいと思うのですが、ネットで検索してもなかなか分かりやすい記事がヒットせず困っています。どなたかやり方を知っている方がいらしたら詳細にご教授願います。

    • ベストアンサー
    • Java
  • SQLの日付時刻のカラムから日付だけで検索したい2

    こんにちは。 自分はデータベースの初心者です。 先程質問した内容にすぐにレスを入れて頂きました。 そこからもう一つ質問があったので別にここに作ります。 あるデータベーステーブルの中に日付時刻が混じったカラムがあります。 伝票のデータなんですが、伝票が作成された情報が chk_open_date_time というカラムで、実データは '2013-11-15 12:19:31.000'; と言った形になってます。 伝票を任意の作成日付で表示できないといけないのですが、ネットで見てもそこがよく解りません。 where の条件句で、2013年11月15日の伝票を出す、と言った事がしたいです。 これにレストつけてくれた方が居て教えて貰ったのが以下の (1)SUBSTRで必要部分を取り出して検索する SELECT * FROM テーブル名 WHERE SUBSTR(chk_open_date_time,1,10) = '2013-11-15' です。 これを応用して「20131155」で検索する事は可能でしょうか? WHERE SUBSTR(chk_open_date_time,1,10) となっている部分は左から1つ目から10文字という意味だと思うのですが、 左から1つ目から4文字、左から6つ目から2文字、左から9つ目から2文字 で 20131115で検索が出来るか と言う事です。 解りにくいかと思いますがどうぞよろしくお願い致します!

  • カンマ区切りで格納するカラムって設計上ありでしょうか?

    例えば、1,2,5,8,9,10 というような形でデータを格納するカラムをテーブルに作ろうと思っているのですが設計上ありでしょうか? 格納したあとは、それSELECTのIN(1,2,5,8,9,10)で 使用するのが主で、更新時のキーが別にあればOKという感じでしょうか? こういう場合に、このような設計をした事があるよ。いった例など教えていただけると幸いです。

  • シートの全データを2次元のテーブルに格納したい

    シートにある全データを2次元のテーブルに格納したいです EXCEL VBA 初心者です。 シートにあるデータを一時的に同じ状態で二次元のテーブルに格納するにはどのようにしたら良いでしょうか 変数宣言から教えてください。 なお、このデータの中身は文字、数字、日付と様々で、行数も列数も随時変わります。 宜しくお願い致します。