0

多態性結合の概念と、それがどのように避けられるかは、Martin Fowlerで説明されているようなテーブル継承パターンを使用して理解します。多態性協会 - 常に悪いですか?

多くのエンティティタイプ(1000+)を含む多数のテーブルで構成されるデータベースがあり、格納されているエンティティにコメントやメモなどのものを追加する必要があるとしますデータベースに格納されます。

多態性結合を使用すると、コメントまたは注釈を持つことができるエンティティのタイプのテーブルと、そのテーブル内のエンティティのIDとIDとコメントを含むテーブルを作成します。あなたは明らかにこれで参照整合性を得ることはありません。

私が遭遇した継承ベースのソリューションを使用すると、この状況での提案は、データベース内のすべてのエンティティのルート 'クラス'として機能するテーブルを作成し、このテーブルのIDとコメントテーブルのEntityIDを使用します。

これは、各テーブルのすべての行にこのテーブルの行が必要であることを意味します。このテーブルにレコードを挿入してエンティティのIDを生成する必要があります(uniqueidentifierを使用できますが、落とし穴)。私にとっては、このテーブルの周りにボトルネックが出現するような気がします。

また、エンティティテーブルとコメントテーブルの間にテーブルを作成する方法もあります。ただし、コメント、メモ、タグなどが必要な場合は、データベース内のテーブルの数が膨大になります。

実世界でこのようなことをしようとした人はいますか?データベース内の参照整合性が欠如しているにもかかわらず、Polymorphic Associationを使用する方がより良い解決策でしたか?

+0

Sql Server 2012以降では、uniqueidentifierの代わりに[sequence'](https://msdn.microsoft.com/en-us/library/ff878091.aspx) を使用できますが、 ['next value for'](https://msdn.microsoft.com/en-us/library/ff878370.aspx)を参照してください。 [シンプルトーク - SQL Serverのシーケンスの基本 - Joe Celko](https://www.simple-talk.com/sql/learn-sql-server/sql-server-sequence-basics/) – SqlZim

答えて

0

これはすべて、どのソリューションが優れているかを判断する基準によります。

簡単な解決法は、単一の多相関連テーブルを作成することです。これは、プログラマーが生産するためには、最初はより速くなります。それはよく文書化されたパターンに適合します。特に今日流行しているMVCタイプのフレームワークの中では特にそうです。しかし、多くの概念を網羅した単一のテーブルが存在するため、これは実際より複雑なソリューションです。また、参照整合性を実装することができないため、データの正確性を保証することはできません。

より簡単な解決策は、単一の概念を含む単一の表が存在するように、各関係ごとに単一の表を作成することです。これにより、参照整合性を使用してデータの正確性と品質を保証することができ、システムの変更の影響を評価する際に、ソフトウェアのメンテナが迅速に対応できます。しかし、より多くのテーブルを最初に作成する必要があるので、より難解です。

より簡単で簡単なソリューションを選択するかどうかは、主観的な選択をすることになります。

+0

これは、データベースにテーブルの量を倍にすると、すべてにコメントを追加することができます。タグやノートのようなものを追加したければ、それを3倍または4倍にします。ポリモリック協会とは反対に行くのが好ましい方法ですか? –

+0

私は好ましい方法を述べなかった。私は、各アプローチの長所と短所を挙げました。個人的には、私はいつも保証されたデータの保全性を優先させてきたので、各関係ごとに1つのテーブルに常に行ってきました。しかし、賛否両論を検討した後、あなたは別の結論に来るかもしれません。 – DrabJay