3

さまざまなタイプの情報に対して完全に異なるフィールドを持ついくつかのデータベーステーブルがあります。これらのテーブルは、アプリケーションフロントエンドのさまざまなカテゴリのデータを表しています。これらのデータセットがどのカテゴリ(db-table)にあるかに関係なく、これらすべてのデータセットにコメント機能を実装したいと思います。

したがって、すべてのエントリが1:nの関係として特定のデータセットに割り当てられる「コメント」テーブルを設定します。もちろん、すべてのデータが単一のテーブルに格納される場合、これはまったく問題になりませんが、テーブルごとの一意のIDしかないため、データを複数のテーブルに格納することでこれを解決するにはどうすればよいですか?すべてのテーブルに何らかのグローバルIDが必要です。

グローバル一意IDを割り当てるための特定のテーブル( "glob_id、table、id"など)について考えていましたが、対応するIDを一意グローバルIDに割り当てる方法を見つけるのに苦労しています。

どんな試みでも、これを解決する方法は?これは良いアプローチですか?別のアプローチはありますか?

可能であれば、データベースレベルでこれを解決したいと思います。

4

1 に答える 1

2

GUID / UID / グローバル一意識別子を使用する道をたどりません。代わりに、メイン メッセージ テーブルと、コメントするエンティティを格納する個々のテーブルの間にマッピング テーブルを作成します。

コメント テーブルへの各挿入には ID があり、その ID は、コメントする元のエンティティの ID とコメント ID を含むマッピング テーブルに挿入されます。

例えば

製品:

id
name

商品コメント

product_id
comment_id

別のテーブル

id
anothervalue

anothertable_comments

some_id
comment_id

コメント表

id
comment

マッピング テーブルを使用する理由は、既存の各テーブルに新しいグローバル識別子を作成する必要があるためです。マッピング テーブルは、1 対 1 だけでなく多対多の関係も許可するため、誰かが同じコメントを複数の既存のテーブルに適用できます。

編集:

単一のマッピング テーブル:

これを追加したいテーブルがたくさんある場合は、1 つのマッピング テーブルを作成するだけです。例えば:

コメントテーブル

id
comment

table_map

table_name
table_id
comment_id

このようにして、テーブル名と行の ID をコメント ID とともにこの単一のマッピング テーブルに追加します。これにより、挿入する必要があるテーブルの数が減りますが、マッピング テーブルで完全なテーブル スキャンを実行したくないため、パフォーマンス上の理由から適切なインデックス作成について考える必要があります。

于 2013-03-02T20:30:49.657 に答える