• ベストアンサー

テーブルの主キーをdate型にする

agricapの回答

  • ベストアンサー
  • agricap
  • ベストアンサー率40% (79/195)
回答No.2

個人的には date 型でも特に問題ないのではないか、と思っていま すが、どうでしょうか。 (そもそも主キーに日付、というのパターンをあまりみたことが  ないのでよくわかりません) 時刻まで含めたいのか、時刻は不要なのかによっても変わってき ますが、ここは時刻はいらいない、として考えてみます。 また、使用するRDBMSによっても変わってくるはずです。 たとえばOracleの場合を比較してみると、 http://biz.rivus.jp/data_type_inside.html (1)サイズ   DATE型・・・7バイト   NUMBER型・・6バイト   CHAR型・・・8バイト   NUMBER型がいいですが、どんぐりの背比べです。 (2)検索スピード   =を指定したときの検索スピードは、当然インデックスが使   われますから、どれにしても問題ないぐらい高速で、どれで   もいいでしょう。それ以外の検索は要件に応じて、どれが早い、   とはいちがいにはいえないと思います。可変長項目をプライマリ   キーにすると検索が遅い、というのはきいたことがありますが、   この場合は全部固定長ですね。 結論としては、検索の用途に応じて、実際にやりたい検索でスピード をためしてみて決める、というところでしょうか。 RDBMSによって内部形式もちがいますし、一般的にどう、とは いえないと思います。やりたい検索が決められなければ、DATE 関連に特化した関数がいろいろ使える(このへんもRDBMSに よってちがいますが)、DATE型が無難かと思います。

uc078
質問者

お礼

回答ありがとうございます。 私なりに調べた結果、#1の方のお礼に書きましたが「3月32日」という日付に対応するための 流れが残っているようです。 理論的には型による違いはあまりないようですね。 (厳密なパフォーマンスを求めるならばむろん無視できませんが^^;) ならば、日付の場合は特に指定がなければ日付型を使っていこうと思います。 #主キーに日付 → ログの主キーを日時(日付型)にしたかった様です。(私ではなく他の人からの話でした)

関連するQ&A

  • 外部参照してるキーを主キーにすることは可能?

    DB設計について質問なんですが、テーブル1のA列を主キーとし、テーブル2のA列から外部キーでA列を参照したとします。 この時、テーブル2のA列を主キーとして設定することは可能なんでしょうか。 (テーブル2の方で列Aと列Bを組み合わせて主キーにしたいのです。要は二列でデータがユニークになるように設計したい) 使用しているDBはPostgreSQLです。 以上、宜しくお願い致します。

  • 外部キーだけのテーブル(主キーがない?)

    データベースのテーブルについておたずねします. 主キーがなくて,そのかわりに外部キー(と主キー以外の列)しか持たない テーブルも可能だと聞きました. テーブルには主キーが必ずあるものだと思っていましたが, どのような使いかたをするのでしょうか. どうやら,最初からデータがあるわけではなく, 追加されるタイミングがわからないデータを格納する場合に作っておく, ということらしいのですが,なんのことかよくわかりません. データベース関連書籍をいくつか調べましたが, 主キーのないテーブルの説明などは見当たりません. また,この悩ましい問題を与えてくれた知り合いに訊ねましたが, テーブル構成などの具体的なことは, 企業内のことなので,教えてもらえませんでした. 何か具体的な例を交えながらご説明いただければと思います.

  • テーブル設計の主キーについて質問があります。

    テーブル設計の主キーについて質問があります。 マスタを物理削除せず、論理削除するデータベースを考える時、 削除日時を主キーに持ってきたりするレイアウトはよくありますでしょうか。 DBはmysqlです。 例) <会社マスタ> (PK)会社コード (PK)会社支店コード (PK)削除日時    会社名    住所 主キーにNULL値は入れられないと思うのですが(←あっていますでしょうか)、 削除日時を無理やりNULL以外のものを入れたとします。 そしてアプリケーションで検索を考えた時に、”削除になっていないもの” を対象にレコードを探します。 インデックス(この場合は主キーですが)が検索高速化に有効に使われるのは、 なるべく対象が少なくなるものと思います。 以上を考えれば、 割合が多い削除日時を主キーにもってくるのはいかがなものかと思うのですが、 どうなのでしょうか。 宜しくアドバイスお願いいたします。

    • ベストアンサー
    • MySQL
  • テーブルに主キーを作らないデメリットは?

    アクセスのテーブルを作るにおいて 主キーのフィールドを作らなかった場合、 どのようなデメリットや不都合がありますか? 既にいくつか主キーのないテーブルを作ってしまいました。 このまま運用しようか主キーを作るべきか悩んでいます。 SQLサーバーに移行する場合などにエラーになるのでしょうか?

  • ORACLE 主キーにすれば遅くならない?

    主キーを定義すればレスポンスは問題ないといっていいものでしょうか? システムのテーブル検索処理の設計で 保有期間を延長し、5百万件近いのテーブルを保有し検索する処理をつくり 過去分の検索処理を作ろうとしているのですが 「主キーがあるのだから問題あるはずはない」という意見が出ていました。 出来るだけ検索量(サイズ、件数)を絞り込み行おうとしたのですが却下されていまいました。 主キーにすれば問題ないという考えは正しいものなのでしょうか?

  • Accessから主キーの無いOracleテーブルにVBAで主キー設定付のODBC接続するには

    Oracle7--------------- Access97 Workgroup Server Release 7.3.2.2.1 TABLE_A----------------ODBC接続(リンクテーブル)     項目1 項目2 項目3 項目4 項目1~項目4は 空白レコードがあり 主KEYが張れない ******************************************************************** 主キーの作成出来ないオラクルテーブルがあります。 Access97からODBC接続を作成する時は (1)マニュアルであれば   対象テーブルに主キーが無ければ 任意の10項目を仮の主キーとして設定出来ますが (2)VBA(自動?)で リンク張ると Dim tab01 As TableDef  Dim db01 As Database  Dim strTABname As String strTABname = TABLE名 Set db01 = CurrentDb Set tab01 = db01.CreateTableDef(UserName & "_" & strTABname, dbAttachSavePWD) tab01.SourceTableName = UserName & "." & strTABname tab01.CONNECT = "ODBC;DSN=****;UID=" & UserName & ";PWD=" & Password & ";ConnectString=con;" db01.TableDefs.Append tab01 主キー設定の無いODBC接続が出来て   データの更新などが出来なくなります。 VBAでも仮の主キー設定付きのODBC接続は  出来ないでしょうか?

  • Excel→Accessテーブル インポート後の主キーについて

    Excelで作成したリストを、Accessテーブルへ追加インポートしたとき、 インポートはできますが、主キーの数値が大きく桁違いな数字が現れてしまいます。 例えば、Accessテーブルのレコード数が10957件あります。 主キーの一番最後の数字は10980番です。(途中いくつか削除しました) Excelのレコード数は100件あり、これを追加インポートしますが、     10979     10980  85200513  85200514  85200515  85200516     ・     ・     ・ というように、10980以下の主キーの数値が、まったく桁違いになってしまいます。 どうしてこのようなことになってしまうのでしょうか? ソフトはExcel2002、Access2002です。

  • テーブルの設計はとりあえず文字列で取り込み?

    テーブルの設計はとりあえず文字列で取り込み? こんにちは。会社の上司にSQLについて教えてもらいました(ACCESS2003)。 上司曰く、とりあえずテーブルの設計はvarcharにしておけば大丈夫。 もし取り込んだ値が数値なら、あとで数値に変換する関数で数値に変換して計算行えばいいよと言われました。 とりあえず、文字列なら必ずインポートできるからテーブルのデータ型は全て文字列型。 というのは正しいのでしょうか?様々な型があるのに、すべて文字列型にしてもいいのかなと素朴な疑問が生まれました。 よろしくお願いします。

  • 外部から取り込んだテーブルに主キーを設定するには

    外部から取り込んだテーブルに主キーを設定するには sql server 2000 のデータベースにsqlserver 2008 express editionをインストールしたPCで別のデータベースのテーブルをインポートウィザードにて取り込み、そのテーブルに主キーを設定しようと、新しいログイン名で-ログイン-セキュリティ-ユーザー-プロパティの画面でセキュリティ保護可能なリソースを選択し、オブジェクトの列の権限にて更新、選択、等許可に設定しても、テーブルの変更が(主キーの設定)ができません。 この変更は、もともと無理なことなのでしょうか。そうだとしたら他にテーブルの列設定を変更する方法はないのでしょうか どうかご教授お願いします。宜しくお願いします。 PC os XP pro (sql server 2008 express edition) サーバー WINDOWS 2000 server SQL server 2000

  • 主キーが文字型での結合

    主キーが文字列型のカラムhoge_idがあります。 (hoge_idは英数字8文字とします) hoge_idで、他のテーブルに結合します。 また、Webからアクセスする必要があり、URLのパラメータで、 ?hoge_id=A1B2C3D4 の様に、主キーを渡す必要もあります。 文字列を主キーにする方法に慣れていないせいか、気持ち悪く感じます。 主キーを別途serial型のカラムidを作成し、 hoge_idには、ユニークキーで設定をし、 結合や、URLのパラメータは主キーのidを使う方法はあまり意味がないでしょうか。 アドバイスを頂けませんでしょうか。 よろしくお願い致します。