- PR -

1つの DataSet を3つのテーブルで使えますか

投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-04-11 11:09
引用:

年度列を追加するほうが高速なのは確かでしょう。元々テーブルを分けようと考えていたくらいなのですから、
年度列を追加して、しっかりとデータを区切ったほうがよいと思います。年度列を追加することに、何か不都合があるのでしょうか?


年度列を追加に不都合はありません。ただ同様な意味を持つ年月日もと考えただけです。将来のこともあり
新規フィールド名を「過去年数」とし、本年度をゼロ、前年度を1と考えています。

引用:

2.不可能ではありませんが、あまり良い方法ではないと思います。Fill して持っておくということは、それだけの
メモリを消費し続けることにもなります必要なときに、必要な分だけ Fill すればそれでよいと思います。


了解しました。その上、将来マルチユーザー対応となれ厄介になりそうなのでおっしゃる通りにいたします。

引用:

また、DataGridView は基本的に大量のデータをバインドすると遅いです。基本的には大量のデータを一度に
バインドするようなことはせず、条件で絞り込ませるなどしてバインドした方がよいです。
(逆にあまりたくさん表示しても見られないでしょうし…)


逆に今回の年度切替も条件で絞り込ませる方法と同じですね。大量データの対応する場合も今回のことを
参考にさせていただきます。
ところで、年度の切替を具体的に対応する方法は「FillBy本年」や「FillBy前年」のSQLを作成しておき、IF文
等で使い分けることになるのでしょうか。(新規スレッドで質問瀬べきでしょうがよろしお願いいたします)

テストデータを作成し、実際にパフォーマンスのテストを行ってみます。人間が少しかったるいと感じるのは
ボタンを押してから私は100ミリセック程度ではないかと考えていますが、一般にはどの程度で感じるので
しょうか。
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-04-11 11:28
引用:

年度列を追加に不都合はありません。ただ同様な意味を持つ年月日もと考えただけです。将来のこともあり
新規フィールド名を「過去年数」とし、本年度をゼロ、前年度を1と考えています。


私は、「年度」として 2006 とか 2007 とかで保持したほうがよいと思います。
そうしておけば、後半の質問にある Fill するためのメソッドとしては、
「FillBy年度」みたいなもの1つで、引数を1つ取るようにすれば十分だと思いますが、いかがでしょうか?
また、0 と 1 で保持するようにすると、年度切り替えのときに全レコードの UPDATE が必要にもなります。

「過去年数」として保持するための理由として挙げていらっしゃる「将来のこと」とは、
具体的にどういうことでしょうか?
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-04-11 11:50
テッテさん、ありがとうございます。

引用:

私は、「年度」として 2006 とか 2007 とかで保持したほうがよいと思います。そうしておけば、後半の質問にある Fill するためのメソッドとしては、「FillBy年度」みたいなもの1つで、引数を1つ取るようにすれば十分だと思いますが、いかがでしょうか?


この意味は年度別のテーブルを持って切り替えたほうがいいという意味でしょうか。
次の意味がよく分りません。もう少し詳しくお願いいたします。
※「FillBy年度」みたいなもの1つで、引数を1つ取るようにすれば十分だと思いますが

引用:

「過去年数」として保持するための理由として挙げていらっしゃる「将来のこと」とは、具体的にどういうことでしょうか?


現在は本年度を含めて3年間を切り替えることになっていますが、運用してみて5年間
の切替や10年間の切替などの仕様変更も考えてのことです。

最初の「年度別にテーブルを保持氏ら方が・・・」の部分をもう少し詳しく教えてください。

修正:年度別にテーブルを保持氏ら方が→年度別にテーブルを保持した方が

[ メッセージ編集済み 編集者: One.net 編集日時 2008-04-11 12:17 ]
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2008-04-11 11:57
さかもとです。

>>最初の「年度別にテーブルを保持氏ら方が・・・」

いえ、項目名で「年度」をテーブルに追加したとして

年度=0
年度=1
年度=2

とするのではなくせっかく「年度」という名前なのですから

年度=2006
年度=2007
年度=2008

としたほうが分りやすいのでは?
という意味だろうと思います。

0よりは2006 のほうが人間が見てもわかりやすいですし。年度が変わった場合にいちいち「今年の0は2007だから・・・」とか気にしなくてもよくなります。

_________________
------------------------------------------
拝啓、さかもとと申します♪
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-04-11 12:15
さかもとさん、ありがとうございます
2006 とか 2007 とテーブル名を年度で表示させたほうがという意味ですか。了解しました。

全面修正

[ メッセージ編集済み 編集者: One.net 編集日時 2008-04-11 12:19 ]

[ メッセージ編集済み 編集者: One.net 編集日時 2008-04-11 12:35 ]
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-04-11 12:39
伝わりにくかったようですみません。
さかもとさん、フォローありがとうございます。

意味はさかもとさんのおっしゃるとおりです。
テーブルは1つで、以下のような形式を想定していました。

年度  発行年月日  …
----  ----------
2006  2006/04/01
2006  2006/08/22
2007  2008/01/20

データは適当ですが、こんなような構造にします。
その上で、TableAdapter の FillBy〜 には引数を設定することができますので、
それを使います。以下のような手順で

(1) Visual Studio のデータセットのデザイナ(xsd ファイルを開いたときに表示される画面)で、
  〜TableAdapter を右クリックして「クエリの追加」を選びます。

(2) 「TableAdapter クエリの構成ウィザード」で、
  「SQLステートメントを使用する」→「複数行を返すSELECT」を選択し、
  「SQL SELECT ステートメントの指定」の画面で、以下のように入力します。
  (列やテーブルの名前は適宜置き換えてください。)

  SELECT 発行年月日, …(列名のリスト) FROM 販売テーブル WHERE 年度 = ?

  また、その次のメソッド名の指定では、FillBy がデフォルトになっているので、
  FillBy年度 みたいな名前に変えておきます。

(3) サーバ エクスプローラからドラッグしたのなら、
  画面の Form_Load に、自動生成された以下のようなコードがあるはずです。

  Me.〜TableAdapter.Fill(Me.〜DataSet.販売テーブル)

  これを、以下のように書き換えます。2007 の部分には年度を指定してください。

  Me.〜TableAdapter.FillBy年度(Me.〜DataSet.販売テーブル, 2007)


このようにして、TableAdapter のクエリに引数を指定することができますので、
これを使ったらどうかというお話でした。

さかもとさんがおっしゃっているように、意味的にわかりやすいですし、
データを蓄積するときも、この構造の方がわかりやすいと思います。
3年間保持するのがルールなら、2007→2008の年度切り替えで、
2004年度のデータを削除すればよいわけです。
これなら5年になろうと10年になろうと、対応が難しいことはないと思います。
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-04-11 12:53
こんにちは。ぴんふです。
さかもとさん、てってさんの言ってるのって・・・
コード:
<販売テーブル>
年度  |伝票番号|販売先|販売額
2006|0001|001|1000
2007|0001|001|1100
2007|0002|002|1200
2008|0001|001|1300
2008|0002|003|1400


こんなイメージだと思って読んでましたが。。。
違ってたら指摘してください。
スレ主さんはわざわざ面倒な方法を選びたがってるような
気がしていまいます。
こちらも違ってたら指摘してください。

今回のケースはテーブルは一つにしたほうが
開発・運用の両者とも楽だと思いますが。
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-04-11 12:56
あ。推敲してる間に一部かぶったようで・・・。
テッテさんへ
ハンドル間違えてすみません。

スキルアップ/キャリアアップ(JOB@IT)