質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

2回答

400閲覧

xmlを用いたDB上のデータ保持方法のリスク

sorazou

総合スコア1

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2023/01/04 07:18

前提

Microsoft SQLServer2012を利用しています。

■「通常の登録方法」

「登録データ」本当はもっと複雑です。

ID名前売上
太郎1000円
花子2000円

「検証ログデータ」検証は複数で人数がいろいろです。

ID種別登録日登録者コメント
登録2023.1.4パートA例外データです
検証2023.1.5社員A問題なしです
検証2023.1.6社員B特になし
登録2023.1.4パートG
検証2023.1.4社員H

こういったデータが80パターンくらいあり、構造がそれぞれ異なります。
そのため、それぞれに合わせてテーブルを準備して対応しております。

■「XML利用の登録方法」

「データ」xml型 または varchar型

IDXMLデータ
下の例参照
省略

xmlデータのイメージ

1<root> 2 <!--登録データ--> 3 <TOUROKU> 4 <名前>太郎</名前> 5 <売上>1000円</売上> 6 </TOUROKU> 7 <!--検証ログデータ--> 8 <KENSHOU> 9 <KENSHOU_ITEM> 10 <種別>登録</種別> 11 <登録日>2023.1.4</登録日> 12 <登録者>パートA</登録者> 13 <コメント>例外データです</コメント> 14 </KENSHOU_ITEM> 15 <KENSHOU_ITEM> 16 <種別>検証</種別> 17 <登録日>2023.1.5</登録日> 18 <登録者>社員A</登録者> 19 <コメント>問題なしです</コメント> 20 </KENSHOU_ITEM> 21 <KENSHOU_ITEM> 22 <種別>検証</種別> 23 <登録日>2023.1.6</登録日> 24 <登録者>社員B</登録者> 25 <コメント>特になし</コメント> 26 </KENSHOU_ITEM> 27 </KENSHOU> 28</root>

上記のような「XMLのイメージ」でデータを保持することで、80パターンごとに準備するのではなく、テーブル定義は同じで、データのIOはプログラム上でXmlSerializerクラスを使ってシリアライズ/デシリアライズすることで共有化したと考えています。

実現したいこと

80パターンごとにコーディングをするのではなく、共通化することで、少しコーディングを減らしたいです。

危惧利している点

  • 検証をする場合、「通常の登録方法」の場合、「検証ログデータ」に1レコード追加すればいいが、「XML利用の登録方法」の場合、登録データも合わせて更新( varchar型だとフィールド単位の更新なので)してしまうので、バグ等の問題発生時に登録データも消えてしまう可能性がある。
  • 検索がしにくい。

確認、ご意見を伺いたこと。

同じデータに対して複数人で更新する可能性があります。
上のようなxmlを利用したデータ保持のやり方に対するご意見があれば教えてほしいです。
例えば、トリッキーなやり方なので「通常の登録方法」でやった方がいい、過去の事例などの意見でもあると助かります。

または、他にも共通化のやり方、王道なやり方などの事例があれば、教えて頂けると助かります。

補足情報

質問が抽象的かもしれませんが、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

結局のところ業務がどのようなものかによりますが、
私ならその業務の内容や80パターンから共通となる主キーを探して足した上で検証実績テーブル的な物にすると思います。
(無ければ何らかのサブキーをシステム側で生成します)
少なくとも実績を積んでいく物に対して追加時に過去のデータまで巻き込んで更新するのは同時更新が仮に無かったとしてもかなり違和感があります。
残りの部分(おそらくは検証内容的なものになると思いますが)についてはシリアライズしても別にいい気はします。

投稿2023/01/04 09:41

macof

総合スコア83

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「構造がそれぞれ異なります」の例が質問からは分からないですが、RDBの親子テーブルで賄えないぐらい複雑ならそのままXMLとかJSONで良いんじゃないでしょうか。
提示されているとおり「検索しにくい」などのデメリットを引き受けるかどうかがポイントかと思います。

投稿2023/01/04 07:42

yuma.inaura

総合スコア1453

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問