- - PR -
直列化のアルゴリズムを自分で実装したい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-13 11:35
こんにちは。
現在、VB.NET2005+SQL Serverで開発しています。 あるツリー構造を持ったオブジェクトを、SQLサーバのテーブルに保存しようとしています。 ツリーオブジェクトの1つのノードは1つのクラスで、かつ1つのテーブルの1レコード に相当します。 このツリー構造(階層は3階層までで単純なもの)のオブジェクトをRDBという2次元 のデータベースに保存するのに自分でシリアライズ/デシリアライズ処理を実装した いのですが、そのためのアルゴリズムを検討しているのですが、なにか参考になるもの をご存知の方はおられませんか? | ||||||||
|
投稿日時: 2005-09-13 11:50
maruさん、こんにちは。
ってことは、SQLServcer も2005だったりします? であれば、XML型の列を使うという手もありますよね。 | ||||||||
|
投稿日時: 2005-09-13 12:02
んーと、ぼんやりとした回答でしか返せませんが。
ノード格納するDBテーブル例
ツリー構造の保存は、こういう形式のテーブルで行うのが一般的かと思います。 (敢えて単純に書いてます) このデータをSELECTした結果を 再帰処理してやれば、デシリアライズと直列化を行えます。 シリアライズは、単純に全てのノードをInsert・Updateするだけです。 これで回答になりますかね? #昼食挟んで用語訂正・文章校正 [ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-09-13 13:00 ] | ||||||||
|
投稿日時: 2005-09-13 12:07
きくちゃんさん、こんにちは。
返答ありがとうございます。 ただ・・・ >であれば、XML型の列を使うという手もありますよね。 よくある販売システムで、ある伝票データなのですが、ヘッダ部と明細部に分かれて いて、その明細部がデータ的には階層構造を持っています。 今のところは、その明細テーブルに、行Noとツリー構造用の親行Noの列を持たせてい ます。その行Noと親行Noを使って、データベースからデータを取り出し/書き込みする 時点で、ツリー構造の組み立てや直列化をしたいのです。 XML型には興味はありますが、今回はテーブルも階層構造以外は良くあるRDB型の テーブルなので、XML型を使うなどあまり特殊なことはしたくありません。 | ||||||||
|
投稿日時: 2005-09-13 13:06
葉瀬崎浩樹さん、こんにちは。
返答ありがとうございます。 テーブル構造と再帰処理を使うことは分かっていたのですが、いざプログラミング しようとしたときに、再帰処理で頭がぐるぐるぐるぐる・・・・<(@_@)> 脳みそが再帰です。 何か参考になるサイトを探しています。 | ||||||||
|
投稿日時: 2005-09-13 13:32
お悩みはその点でしたか。。 サイトではないですが、参考になれば。 VB6で、TreeViewにMeisaiのNodeを追加する処理です。 #やっつけでこさえたので、大体の雰囲気を掴んでいただけたら。。
MeisaiFactory.CreateOneでは、CMeisaiのインスタンスを作って、 Itemsコレクションに追加しております。 #VB6には、コンストラクタが無いので。。 #サンプルソース修正・コメント追加 #コメント追加・日本語修正orz [ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-09-13 13:37 ] [ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-09-13 13:45 ] | ||||||||
|
投稿日時: 2005-09-13 13:59
葉瀬崎浩樹さん、わざわざすいません!!
感謝です これを元に、VB.NET+SQLServerで使えるように改造してみます。 | ||||||||
|
投稿日時: 2005-09-13 14:07
再帰処理は慣れで書けるようになるはずです。 (慣れないうちは無限ループに気をつけて下さい:P お時間があるようでしたら、まずは、 単純な再帰処理で練習されることをお勧めします。 #サンプル挙げてるくせに、矛盾すること言ってますね、私 では、頑張ってください。ノシ |