これは非常に単純な質問ではないことは承知していますが、XML ファイルからのデータを格納するために SQL データベースをどのように設計しますか? (XML スキーマはなく、さまざまなタグ名、属性、およびネストされた要素)。
これは、技術的というよりも概念的なものです。階層データ モデル (XML) からリレーショナル モデル (SQL) への移行方法。
これは非常に単純な質問ではないことは承知していますが、XML ファイルからのデータを格納するために SQL データベースをどのように設計しますか? (XML スキーマはなく、さまざまなタグ名、属性、およびネストされた要素)。
これは、技術的というよりも概念的なものです。階層データ モデル (XML) からリレーショナル モデル (SQL) への移行方法。
スキーマがなく、従来のリレーショナル方式である従来のRDBMSを使用したい場合は、基本的に失敗します。
ただし、すべての主要なデータベースシステムに存在するXMLデータ型(Oracle(> 9i)、MS SQL(> 2005)、Postgres、DB2 )を選択できます。これにより、XPath式を使用してXMLコンテンツを処理できます。これは非常に優れています。
また、お勧めの読み物:
または、階層モデルをリレーショナルに変換する必要がないようにすることもできます。これは、CassandraやMongoDBなどのNoSQLDBの最適なユースケースのようです。
(最初はコメントとして投稿しましたが、答える価値があると思います...)
さて、何が問題なのですか?ツリーを関係として表現するのは簡単です。
NODE ( id, tag-name, text )
ATTR ( id, attr-name, attr-value )
NODEATRR ( node-id, attr-id )
NODENODE ( node-id, child-node-id )
関係の間の鍵とつながりは明らかだと思います。確かに、これは見苦しく文字列型ですが、任意のXMLを格納したい場合は、このようになります。
SQL には、独創的なツリー エンコーディング スキームがいくつかあります。繰り返しになりますが、巧妙なツリー エンコーディングでさえ、適切に設計されたデータベース スキーマより劣っています。