0

多くのテーブルのペアがあり、どのペアが PK-FK 関係によって相互に関連付けられているテーブルを持っているかを効率的に判断したいと考えています。

  1. PK-FK 関係が文書化されている場合はそれを利用しますが、常に文書化されているとは限りません。(例えばソースがフラットファイルの場合など)
  2. 文書化されていない場合は、2 つのテーブルが関連しているかどうかを効率的に判断する方法が必要です。
  3. ペアのテーブルが非複合キーによって関連付けられていない場合は、複合キーを使用する必要があります。

私が探しているのは、以下のいずれかです。

  1. 既存のアルゴリズム。
  2. 任意の研究論文。
  3. 任意のアイデア/ポインタ。
  4. オンラインで入手可能な同様の作品のいずれか。
  5. 本のおすすめなど

例えば:

テーブルのペアの下にあるとします。

{Table1, Table2}
{Table3, Table4}
{Table5, Table6}

などなど...

{Table3, Table4}上記のペアのうち、テーブル Table3 と Table4 が PK-FK 関係で互いに関連付けられている場合、ペアを返したいと思います。正しいペアを返すには、テーブルが関連しているかどうかを効率的に判断する方法が必要です (関係が文書化されていないと仮定します)。

注:メタデータ ベースの検出だけでなく、テーブル間の PK-FK 関係のデータ ベースの検出を探しています (メタデータが利用できない場合があるため)。

よろしくお願いします。

4

1 に答える 1

0

免責事項: 私はそのようなアルゴリズムの 1 つである Linkifier の作成者です。Linkifierは、メタデータ (列名とそのデータ型の類似性など) と列統計 (バイト単位の平均列幅など) に基づいて FK 制約を推定します。

詳細を述べる前に、FK 制約の識別は一般に困難な問題であることに注意することが重要です。DB が FK 制約を推測しないのには理由がありますが、ユーザーはそれらを提供する必要があります。したがって、見積もりが 100% 正確であるとは期待しないでください。

データベースに制約を設定する場合の一般的な推奨ワークフロー:

  1. 列のデータ型と名前が適切であることを確認してください。DBLintが役立つ場合があります。
  2. データベースが小さい場合は、データベース内のすべての列の統計を計算するようデータベースに指示します。これにより、PK および FK 制約推定の精度が向上します。ただし、大規模で複雑なデータベースの統計計算には、かなりの時間がかかる場合があります。一方、統計は正確である必要はありません (すべてのデータに基づいて計算されます) - 推定値 (データのサブサンプルに基づく) で十分です。データベース ベンダーのドキュメントを参照してください。
  3. PK がデータベースに設定されていない場合は、Linkifier に PK を推定させます。見積もりを確認した後、生成された SQL 変更クエリをデータベースで実行します。真の PK を知ることで、FK 制約の一方の側が正しいことがわかるため、FK 制約推定の精度が向上します。警告: PK の設定と適用には時間がかかる場合があります (特に大きなトランザクション テーブルでは)。
  4. PK をデータベースに追加した場合は、Linkifier を再実行して、FK 制約の実際の見積もりを取得します。
  5. FK 制約の見積もりを慎重に復活させた後、生成された変更クエリをデータベースで実行します。警告: 推定された FK 制約をデータベースに盲目的に適用することはお勧めできません。誤検知が実際にはデータベースによって有効なものとして受け入れられる可能性があるためです。また、FK 制約の設定と適用には時間がかかる場合があります。

ER図を生成するだけの場合は、Linkifierから見積もりをエクスポートし、yEd (ER図に適したレイアウト・アルゴリズムはBPMN)またはOracle Data Modelerで視覚化します。

于 2017-06-22T18:20:02.807 に答える