[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データベースの正規化等について』(tst)
データベース(DB)について
【質問】 1・正規化したほうがよいのか 2・データベースのシート上に関数を入れてよいのか 3・ピポットテーブル参照は辞めたほうが良いのか。
初見で触る人や、引き継ぎの事なども考えて、なるべく単純な形でわかりやすくしておきたい。 どのような方法がベストかご指導ください。 −−−− 【経緯】 毎年、販売者別収支を一括で把握するために収支表を作成していて、全販売員を載せた収支表を作成している。下表
A B C D E F AZ
商品類1 商品類2 ・・・商品類20
氏名 売上 原価 利益 売上 原価 利益
山田 100 30 70
白石 500 150 350
川辺
・
・
・
約900人
これを年度の経緯を評価するため、全年度が入っているデータベース(DB)を作成することにした。 試しに一度作ってから考えようと、DBらしきものを作成したものの、上記の疑問がわき、より単純な形に作り変えた方が良いのかどうか、アドバイスをいただきたい。
−−−− 【試作DBの作成過程】 [フィールドの決定] 年度を識別するフィールド(列)を加え、DBに列数はほぼそのままの形式で値貼り付けをして約3年分のDBを作成した。下表
A B C D E
年度 氏名 商品類1売上 商品類1原価 商品類1利益 商品類2売上・・・
2017 山田 100 30 70
2017 白石 500 150 350
2017 川辺
・ ・
[計算式の追加] さらに追加でデータを作成するために、DBに追加でフィールドを作成し、そこに計算式を挿入した。 (例) BA2 =C2/B2 ・・・原価率
[ピポットテーブル参照] さらに、全体集計に対する比率を出したかったのだが、レコードをまたぐ計算式を入力したくなかったので、DSUMやSUMPRODUCTなどは使わず、一度別シートにピポットテーブルで集計表を作成し、そこからの参照の関数を作成した。 ピポットテーブルでの集計を簡単に見られることで、検算の意味合いもあった。
(例) CA2 = ピポットテーブル参照(販管費計÷全人員)/B2 ・・・販管費率
[完成・課題] これで思い通りのデータを得られるようになったし、 DBを直接参照してもわかりやすいので、満足いく形になっている。 一方で、安定した構造になっているとは思えないこと、説明無しでは解読が難しいと思われることなどから、今後の蓄積に耐えられるように、より単純な 構造に改善したい。
−−−−
【質問】 1.正規化したほうがいいのか。 例えば、売上、原価、利益は正規化してレコード数を増やして、アイテムとして処理する方が良いのかどうか。(列数がデータで70、数式を入れると100列を超える) そうした場合、現在は、同一レコード内(+ピポットテーブル参照)だけで計算しているが、別レコードを参照する計算式になってしまう。すると、DBを直接参照する際に、フィルターなどをかけると、計算が崩れたりする可能性を 考慮する必要がある。 また、DBを直接参照して、わかりにくくなるような気がする(やってみないとわからない)
今回正規化せずにDB化してみた理由は、 a.DBの直接参照性を優先したこと b.現状年間レコード数が千に満たないので、10年単位で考えた場合は、わざわざ正規化する必要がないのではないか
と考えたから。
2.そもそもDBに計算式を追加していいのか DBに計算式を挿入するのがなんとなく憚られたために、今回の計算式も同一レコード内だけの計算式にしたが、DB内で計算式を入れることは一般的かどうか。重くなったりしないか。今後のDBの追加や引き継ぎ等も含めて、注意点は何かあるか。
3.ピポットテーブルの参照は続けていいか ピポットテーブルで集計値を出して、それを計算式にして戻しているが、 ピポットテーブルを経由した循環参照になっていると言えるので、なんとなく不安定な構造になっていると感じる。集計値をピポットテーブルで見られるのは便利だが、このまま続けてよいか。
また構造として複雑だが、何かもっとスッキリした方法の提案はないか。 漠然とした質問で申し訳ありませんが、エクセルを使いはじめて日が浅いため、当たり前の事がいまいち理解できていないことがあります。見当違いな点もあるかと思いますが、どうぞご指導ください。
< 使用 Excel:Excel2010、使用 OS:Windows8 >
−−−−−−−−−−−−−−−− 初質問マーク?が付いてなかったので、-を−に変更。 その際、左に半角スペースを追加。 スレ主の初投稿時間 2017/08/20(日)09:32
BJ 2017/08/20 13:05
DBと呼ぶのであれば、70列もある大きなテーブルであれば、正規化を考えるのは当たり前です(レコード数と正規化は関係なく、 列数の方が重要です)。 ただし、現在1テーブルだけで用が足りているならば、あえて完全に正規化せず、冗長性を持ったままでも良いかも知れません。 何でもかんでも完全正規化するのではなく、登録のしやすさ、利用のしやすさや速度性能を考え、あえて冗長性を残すというのも、DB設計では当たり前の事です。 その判断は、データ内容によるので、漠然と正規化すべきか、だけ聞かれても、答えようがありませんよ。
正規化すべきかどうかの判断は、例えば社員番号や顧客番号、商品番号と商品情報、商品類と商品番号の関係等、情報を分けて考えたほうが入力処理と集計、出力がすっきりするとか、それぞれのテーブル更新が簡単になるかどうか、という事を考慮して決めてください。
(???) 2017/08/21(月) 09:14
まず、DBについて、おっしゃる通りの認識でごさいます。
ただここはエクセルの学校ですし、一般にDBと言ってRDBMSの事だとは思いませんでした。
より広義でのただのデータの蓄積とお考えください。
さて、ご返事を読むにつれて、結局はデータの使いやすさを決めるのは使う本人(=自分)だということがわかり、自分の中でも疑問が整理された気持ちでおります。
私としては「形式を変えてしまった場合の、ピポットテーブルの使い勝手」を知りたかったのだとわかりました。また、それもつまるところ自分でやってみないとわからないだろう、というなんとも赤面する示唆を頂いたような気がしております。試しにいろいろやってみて形を決定していこうと思います。
アドバイスありがとうございました。
(tst) 2017/08/24(木) 19:05
ピボットについて意見すると、ピボットはちょっとしたデータ集計、特にDBではクロス集計という少し高度なSQL文を書かないと実現できないようなことを、簡単なドラッグ&ドロップで実現できてしまうので、とても便利です。命令を調べる必要がないので、SQL文やマクロの知識が無い人でも、DB集計できてしまうわけです。
ただ、商品流通の管理となってくると、データ量が膨大であり、しかも列の数が増えてくると、処理時間もかかってきます。ピボットはあくまでも簡易集計と捉えて、ちゃんとしたRDBMSへの移行を考えてみても良いかもです。(データベースに詳しいソフトウェア技術者を雇うか、依頼するのがお薦め) 詳しい人に実際の情報を見せれば、どういうテーブル構成にするのが適切なのか等、的確なアドバイスが得られると思いますよ。
(???) 2017/08/25(金) 10:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.