0

ユーザーがページを購読できるページ購読のようなアプリケーションがあります。ページが表示されたときに、そのページを購読しているユーザーの数とユーザーのリストの両方を表示したいと考えています。

また、誰かがユーザーのプロフィールを表示する場合、そのユーザーがサブスクライバーであるすべてのページを表示する必要があります。

私が考えたのはこれです:

Page
    id
    users (JSON format containing userIDs of all subscribed)

User
    id
    page_IDs (JSON format containing the IDs of the walls he is subscribed to)

これは非常に小規模なアプリケーションでは問題ないと思います。しかし、サイトが拡大し、各ページの購読者が 1000 人を超えた場合、そのすべての JSON データを PHP で配列にデコードすることは、まったくお勧めできません。

より良いスキーマを念頭に置いている人はいますか?

どうもありがとう!

4

1 に答える 1

0

さて、あなたのデザインはあまり良くありません。それは実際にはちょっと悪いです。原則として、目標は、少なくとも第1 正規形を満たすスキーマを持つことです。

ページに複数のユーザーがサブスクライブしている可能性があり、ユーザーが複数のページにサブスクライブできる状況にあります。したがって、テーブルusersとテーブルの間にはpages多対多の関係があります。

このような状況での最善の解決策は、2 つのテーブルを接続する 3 つ目のテーブルを用意することです。通常、このテーブルは 2 つの列のみで構成されます。

  • 列1には、テーブル1の主キー、別名外部キーが含まれます
  • 列 2 には、テーブル 2 の主キー、別名外部キーが含まれます

これには例外もありますが、一般的には、このようなものを設計/正規化する方法です。

あなたの状況により具体的に:

pages
-------------------------
page_id
<other columns>
PRIMARY KEY(page_id)

users
-------------------------
user_id
<other columns>
PRIMARY KEY(page_id)

subscriptions
-------------------------
page_id
user_id
PRIMARY KEY(page_id,user_id)
于 2013-10-14T18:14:42.727 に答える