-1

タイトルの用語が正しくない場合はご容赦ください。ここで説明しているのは、2つ以上のテーブル間の一種の多対多の関係を可能にする中間テーブルです。

この場合、単一のテーブルは、必ずしも相互に関連しているとは限らない他のテーブルに適用されるデータを保持します。

具体的にはサイト:

  • テーブルPagesのページAとBはサイト1に属しています。
  • テーブルUsersのユーザーAもサイト1に属していますが、ユーザーBはサイト2に属しています。

したがって、現時点での中央のテーブルは次のようになります。

id | site | page | user
-----------------------
 1 | 1    | A    | null
 2 | 1    | B    | null
 3 | 1    | null | A
 4 | 2    | null | B

これが多くの問題の原因になるように見えますが、システムは完全に正規化されたデータベースによってサポートされます。たとえば、ユーザーを削除すると、マトリックス内のそれに関連付けられたレコードが削除され、更新もカスケードされます。

ここにあるデータの量はかなり多くなる可能性があることを理解しています。そのため、5〜200レコードを含む参照テーブルをリンクするためにのみ使用されます。たとえば、サイトに接続されている数千以上のレコードを含み、成長している投稿やメディアなどの大量レコードテーブルは、フラット化され、サイトIDを直接保存します。

最後に、このようなソリューションが必要な理由は、カスタマイズ可能な数のサイトに要素を割り当てる必要があるためです。それ以外の場合、オプションは1サイト、すべてのサイト、またはサイトなしです。

だから私の質問は、これは効果的な方法ですか?

4

1 に答える 1

1

はい、ページ/ユーザーを複数のサイトに割り当てることができる必要があります。ただし、この2つは他の点では関連していません(現在の既知の要件を前提としています)。そして、たとえそうであったとしても、関係を示すためのより良い方法があるでしょう。

何らかの理由で、正規化されたテーブルを使用しても関係が有効にならないように思われます。これがどのように機能するかです。

UserSite
==========
userId  -- fk reference user.id
siteId  -- fk reference site.id

タプル[ userIdsiteId]は一意である必要があります。1つのサイトには多くのユーザーがいると予想され、ユーザーは複数のサイトに存在する可能性があります。この関係は、ユーザーとサイトの間を追跡します。ユーザーがサイトを有効にしたいですか?それらをこのテーブルに追加します。ユーザーのサイトを無効にしたいですか?このテーブルからそれらを削除します(または「無効」列などがあります)。

ページとサイト間の関係を記録するのテーブルが必要になります。関係で何かPageSite他のことをしているのでない限りそれらを同じテーブルに置く必要はありません。pageuser

于 2012-09-26T18:01:26.990 に答える