0

私は、ブラウザでレンダリングされた一連のボックスを追跡するシステムのリレーショナルデータモデルを作成しています。各ボックスには、レンダリングされた画像が含まれています。

現在、1つのテーブルがあります:ボックス。各行には、x座標とy座標、幅と高さの列、および画像コンテンツのタイプ(mimeタイプなど)とコンテンツの場所(ファイルパスやURLなど)の列があります。

一部のボックスには1層のネストがあります。つまり、1つのボックスに別のボックスを含めることができます。このような場合、コンテンツタイプの列には特別な値「box」があり、場所はBoxテーブルへの自己参照です。

一部のコンテンツタイプ(少数派)には、コンテンツタイプに関連付けられた追加の値があります。たとえば、画像ファイルがより複雑な複数ページ形式(PDFなど)の場合、どのページをボックスにレンダリングするかを保存する必要があります。

  • これを1つのテーブルで表すことはできますか/すべきですか?この場合、追加のパラメーターを(たとえば)ファイルURL(/path/to/PDF.pdf?page=4)にクエリ文字列として格納できます。

  • 自己参照ボックスの行の更新を処理するにはどうすればよいですか?つまり、別のボックスを含むボックスを削除する場合は、両方の行を削除する必要があります。場所の列に外部キー制約を使用することはできません。URL(ネストされていないボックスの場合)またはボックスの行ID(ネストされたボックスの場合)のいずれかである可能性があるためです。

4

1 に答える 1

0

私はいくつかの考えを提供しようとします-

これを 1 つの表で表すことができますか? この場合、追加のパラメーターを (たとえば) ファイル URL (/path/to/PDF.pdf?page=4) にクエリ文字列として格納できます。

あなたが説明した上記のモデルでは、可能性のある可能性が
あります。1 つの画像を含む複数のボックス (単一ページ形式) - 同じ画像を含む少数のボックス。
b. 1 つの画像を含む複数のボックス (複数ページ形式) - 同じ PDF の同じ/異なる画像を含むいくつかのボックスがあります。

imageモデルをより一般的なものにするために、各ボックスが任意のタイプの画像を保持できるテーブルを参照していると仮定できます。これは、テーブルの正規化に役立ち、将来の拡張にも役立つ可能性があります (下位互換性オプションを使用)。

画像に関連して、別のフィールド (列) を追加したいとします。その場合、メイン テーブルに追加するのではなく、テーブルを変更するだけでimage十分です。

image複数のボックスが同じ画像を参照している場合、すべての情報セットをデータの重複なしにテーブルに格納するには、参照カウンターだけで十分です。

もちろん-追加のオーバーヘッド(小さいと思います)は、別のテーブルを参照します。

自己参照ボックス行の更新を処理するにはどうすればよいですか? つまり、別のボックスを含むボックスを削除すると、両方の行が削除されます。URL (ネストされていないボックスの場合) またはボックスの行 ID (ネストされたボックスの場合) のいずれかである可能性があるため、location 列で外部キー制約を使用することはできません。

外部キー制約の制限により、最も派生した子 (ボックス) を見つけて最初に削除するまで、すべてのボックスを反復処理する必要があるアプリケーション ロジックのオプションが 1 つあります。そして、すべてのボックスに対してそのようなことを行います。アイデアは、複雑なツリーを削除することに似ています。ただし、これにより、ボックスの削除を実装するアプリケーション ロジックが増加します。

チッ!

于 2013-02-01T11:15:54.150 に答える