XML モデルとリレーショナル・モデルとの比較

データベースを設計するとき、扱うデータが XML モデルまたはリレーショナル・モデルのどちらにより適しているかを判別する必要があります。

このトピックでは、判別する際に考慮する必要があるいくつかの要因について説明します。

XML データとリレーショナル・データとの主な相違点は、以下のとおりです。
  • XML データは階層構造で、リレーショナル・データは平坦な構造である。

    XML 文書にはデータ項目の相互関係に関する情報が、階層の形式で含まれています。 リレーショナル・モデルでは、定義可能な関係のタイプは親表と従属表との関係だけです。

  • XML データは自己記述型であり、リレーショナル・データはそうではない。

    XML 文書にはデータだけではなく、そのデータの内容を説明するタグも含まれています。 単一の文書にさまざまなタイプのデータを入れることができます。 リレーショナル・モデルでは、データの内容は列定義によって定義されます。 1 つの列内のすべてのデータは同じタイプのデータでなければなりません。

  • XML データには特有の順序付けがあるが、リレーショナル・データにはそれがない。

    XML 文書では、データ項目が指定される順序は文書内のデータの順序と同じであると想定されます。 多くの場合、文書内での順序を指定する別の方法はありません。 リレーショナル・データでは、1 つ以上の列に対して ORDER BY 節を指定しなければ、行の順序は保証されません。

データの性質によって、そのデータを保管する方法が決まることがあります。 例えば、データが元々階層的であり自己記述型であれば、それを XML データとして保管できます。 ただし、どのモデルを使用するかを決める際には他の要素も影響することがあります。

それらの要素には、以下のものがあります。
  • データの柔軟性が最大限に必要かどうか

    リレーショナル表は、かなり固定的です。 例えば、1 つの表を正規化して多数の表にしたり、多数の表を非正規化して 1 つの表にすることは非常に困難です。 データ設計が頻繁に変更される場合は、 それを XML データで表現する方が優れた選択となります。

  • データ検索の最大限のパフォーマンスが必要かどうか

    XML データのシリアライズおよび解釈には、いくらかの費用が関連しています。 大規模な XML 文書から数個の項目を取り出すことは、相対的に高コストです。 したがって、リレーショナル形式になったデータのほうがパフォーマンスに優れている 可能性があります。 一方、文書全体を取り出す場合は、リレーショナル形式で同等のデータを取り出すためには多数のリレーショナル結合が必要とされるのであれば、XML データのほうが効率的になります。

  • データが後にリレーショナル・データとして処理されるかどうか

    後続のデータ処理が、データがリレーショナル・データベースに保管されているということに依存する場合、分解を使用して、データの一部をリレーショナルとして保管することが適切な場合があります。 この状態の一例は、オンライン分析処理 (OLAP) がデータウェアハウス内のデータに適用される場合です。 また、XML 文書の全体に対して他の処理が必要な場合は、XML 文書の全体を保管することに加えて、 データの一部をリレーショナルとして保管することが適切な方法であることがあります。

  • データ・コンポーネントが階層の外部で意味を持つかどうか

    データは元々階層的な性質を持っていることがありますが、子コンポーネントは親から値を提供される必要がありません。 例えば、購入注文にはパーツ・ナンバーが含まれることがあります。 パーツ・ナンバーのある購入注文は、XML 文書として表現するのが最適かもしれません。 ところが、各パーツ・ナンバーにはパーツ記述が関連付けられています。 パーツ記述はリレーショナル表に含めた方が良いかもしれません。なぜなら、パーツ・ナンバーとパーツ記述との間の関係は、パーツ・ナンバーが使用される購入注文とは論理的に独立しているからです。

  • データ属性がすべてのデータに適用されるのか、またはデータの小さなサブセットだけに適用されるのか

    考えられる多数の属性を持つデータ・セットもありますが、それらの属性のうち、少数のみが特定のデータ値に適用されます。 例えば、小売カタログでは、サイズ、色、重さ、素材、スタイル、織り方、消費電力、燃料の所要量など、 考えられるデータ属性が多数あります。 カタログ内のどのアイテムにせよ、関係があるのはそれらの属性のサブセットに過ぎません。消費電力はテーブル型電動鋸には対しては意味がありますが、外套に対しては意味がありません。 このタイプのデータはリレーショナル・モデルでは表現および検索が困難ですが、XML モデルでは表現および検索が比較的容易になります。

  • 参照整合が必要かどうか

    XML 列を参照制約の一部として定義することはできません。 そのため、XML 文書内の値を参照制約に含める必要がある場合は、 データをリレーショナル・データとして保管してください。

  • データを頻繁に更新する必要があるかどうか

    現在のところ、XML 列内の XML データを更新するには文書全体を置き換える必要があります。 非常に大きい文書の小さな断片を多数の行に関して頻繁に更新する必要がある場合、 データを XML 以外の列に保管する方が効率的です。 ただし、更新するのが小さな文書であり、一度に少数の文書だけを更新する場合には、XML として保管しても同様に効率的なものになり得ます。