No.8ベストアンサー
- 回答日時:
要望が今一つはっきりしませんが(^^;
以下のような設計ではいかが?
薬品テーブル:
コード(プライマリーキー)
名称
製造会社
新規登録日時
値段履歴テーブル(データが変更される項目を固定的なフィールドとして持つ)
ID(プライマリーキー)
コード(薬品テーブルの)
値段(仮に値段が履歴記録対照であるとして)
変更日時
XX履歴テーブル(データが変更される項目を固定的なフィールドとして持つ)
ID(プライマリーキー)
コード(薬品テーブルの)
XX
変更日時
・履歴を記録したいフィールド分、履歴テーブルを作る
・変更のタイミングが似通っているものがあれば、グループ化する
・仮に50の履歴テーブルを作成して、リレーションを取った場合、パフォーマンスがどのようになるかは、私にとって未知の領域です。
No.7
- 回答日時:
以下のような設計ではいかが?
薬品テーブル:
コード(プライマリーキー)
名称
製造会社
新規登録日時
履歴テーブル(データが変更される項目を固定的なフィールドとして持つ)
ID(プライマリーキー)
コード(薬品テーブルの)
値段(仮に値段が履歴記録対照であるとして)
XX(その他履歴を記録するフィールド)
これで、通常一覧する際にはリレーションでデータを抽出できるし、ある製品に関し、履歴を参照することも、簡単に出来るでしょう。
ありがとうございます。
履歴テーブルに薬品テーブルの全フィールドを持つとすると、薬品テーブルと同じ構造に更新日付が付いた形になりますかね。そうすると3番目の回答と同じになりますね。
問題は特定の項目が変更されるわけではなく、キー以外の全項目に変更の可能性があることなんです。
No.6
- 回答日時:
>50個って多いですかね。
回答したつもりだったのにはじかれたのかな・・・
テーブルの中身が分からないことには多いかどうかは断定できません
一般論としてはリレーショナルデータベースでは
フィールド数の少ないテーブルが数多く出来るという傾向があります
テーブルはいくつあるのでしょう
これひとつだけということなら先ず間違いなく問題ありでしょうね
補足で出されたテーブルはフィールド名が書かれている範囲では問題ありません
問題があるかどうかは全てのフィールド名を見ないと分からないですね
ただ、お困りの様子からはテーブル構造に問題ありカナという気はします
ありがとうございます。
そうですよね。やはり全体を見ないとなんともいえないものですよね。
非常にあいまいな質問で申し訳ありません。
No.5
- 回答日時:
失礼しました。
修正です!誤:
ちなみに冗長性を考慮されるのでしたら、変更のあった項目だけを「更新履歴テーブル」にもたせたらいかがでしょうか?
正:
ちなみに冗長性を考慮されるのでしたら、変更のあった項目の前歴のみを「更新履歴テーブル」にもたせたらいかがでしょうか?
※したがって、もちろん最新の内容は薬品テーブルに上書きされています。
No.4
- 回答日時:
あらっ!Accessではなかったですか(^^;
4万件、3年に一回の履歴更新でしたら、まったく問題ないです。
ちなみに冗長性を考慮されるのでしたら、変更のあった項目だけを「更新履歴テーブル」にもたせたらいかがでしょうか?
更新履歴テーブル:
コード
変更項目名
変更内容
変更登録日時
ありがとうございます。
冗長性を考慮するとこれがよさそうです。
ただ、SQLで対象日付より前の値を取得してひとつのテーブルとして行を取得するのが大変そうですね。
他にこれはというのがあればいいのですが。
No.3
- 回答日時:
項目数に関しては、別に議論してください。
アルゴリズムはこんな感じです。
2つテーブルを作成してください。
たとえば・・・
薬品テーブル:
コード
名称
値段
製造会社
新規登録日時
変更履歴テーブル:
コード
名称
値段
製造会社
履歴登録日時
履歴登録用のフォームを作成
1.初期表示
薬品テーブルを単票表示させ、コードをキーにしたサブフォームに変更履歴テーブルを表示させる)
※同時に履歴登録用の非連結フィールド(名称、値段、製造会社)にも薬品テーブルと同じ内容を表示(コピー)させる。
2.履歴登録
非連結フィールドに必要な変更を加え、履歴登録ボタンをクリックすると、追加クエリーにより非連結フィールドの内容を変更履歴テーブルに追加する。
この時、コード、履歴登録日時(date)も追加するのを忘れずに。
3.最後にフォームを自動リフレッシュすれば、更新履歴テーブルに追加された内容が表示され確認できます。
この回答への補足
まったく同じ履歴用のテーブルを持つと、複数の項目に対して別の日時で更新が行われた場合はかなり冗長なデータを持つ気がしますが、案外手っ取り早くていいかもしれません。
ちなみにレコード数は4万件くらいです。
書かれている作成の仕方はACCESSっぽいですが、実際やるのはACCESSではないです。DBはSQLAnyWhereです。
No.2
- 回答日時:
頻繁に変更のあるようなものを列(フィールド)としているテーブル設計に問題があるのでは
アップされた情報からだけでは断定はできませんが
フィールド数の50個もかなり多いみたいですし
きちんと正規化が出来ていないテーブルの匂いがしますね
フィールドじゃなくレコードになるように設計を変えれば
履歴情報もテーブルに残せるように出来ます
出された情報からいえるのはここまでですかね
この回答への補足
更なる回答を期待して補足します。
テーブル【薬品】
-----------------------------
コード |
名称 |
カナ |
効能 |
値段 |
形 |
会社 |
:
:
-----------------------------
こんな感じで50個くらい項目があって、通常は登録時のデータのままなのですが、たまに(3年に1回とか)どこかの項目に変更が変更されたりするため、全ての項目に関して更新履歴を持ちたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- その他(Microsoft Office) エクセルでテーブルの最終行が自動追加されない 1 2023/01/04 15:09
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Oracle 参照関係のフィールドについて 1 2023/05/27 17:49
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
- Access(アクセス) ACCESS2019 ナビゲーションウィンドウの色 1 2022/05/10 17:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
access テーブル内のレコード...
-
Accessレコードの追加や変更が...
-
3つの表を1つに縦に連結する
-
Accessでテーブルからテーブル...
-
ツリー構造をRDBで表現するには?
-
SQL: SELECT UNIONすると文字数...
-
Accessクエリでの、LIKE条件
-
デザインビューで、連結式 を...
-
SQLで条件指定結合をしたいがNU...
-
2つのテーブルAとBをマージ...
-
リンクテーブルを CopyObject ...
-
2つのテーブルを比較して一致し...
-
accessのマクロでODBC接続で外...
-
Accessの追加クエリで既存のテ...
-
2つのmdb内にある同名テーブル...
-
Accessでvlookupみたいなことは...
-
Accessのクエリで半角円マーク...
-
翌営業日までの日数をSQLで求め...
-
accessで指定期間の曜日カウン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
ACCESSに同時アクセス(編集)を...
-
Accessでvlookupみたいなことは...
-
Accessでテーブルからテーブル...
-
Accessクエリでの、LIKE条件
-
Accessレコードの追加や変更が...
-
access テーブル内のレコード...
-
SQLで日付を条件に削除したい
-
3つの表を1つに縦に連結する
-
Accessの追加クエリで既存のテ...
-
SQLで条件指定結合をしたいがNU...
-
デザインビューで、連結式 を...
-
ツリー構造をRDBで表現するには?
-
ACCESSで指定されたテーブルか...
-
リンクテーブルを CopyObject ...
-
2つのテーブルを比較して一致し...
-
時間の足し算
-
ODBCで接続するとDBに変更/追加...
-
パススルークエリをテーブル作...
-
INSERT時にデータ登録とmaxの発...
おすすめ情報