0

私は3つのテーブルを持っています

USER
USER_ID
USERNAME
[additional fields]

ASSET
ASSET_ID
DISPLAY_NAME
[additional fields]

PAGE
PAGE_ID
[additional fields]

USERテーブルはあなたが期待するものであり、標準的なテーブルUSERです。各ユーザーは自分のライブラリにアセットを追加できるため、 と の間には 1 対多の関係がUSERありASSETます。さらに、それぞれASSETが複数のページで構成されており、それぞれにPAGE、そのユーザーだけが見るための複数のメモを含めることができます。私の最初の考えは、3 つのテーブルすべての間にルックアップ テーブルを作成することです。

USER_ASSET_PAGE
UAP_ID
USER_ID
ASSET_ID
PAGE_ID
NOTE

そのため、USER_ASSET_PAGE テーブルにクエリを実行して、特定のユーザーの特定のドキュメントの特定のページに対応するメモを取得する必要があります。

SELECT NOTE 
FROM USER_ASSET_PAGE
USER_ID = {user_id} AND ASSET_ID = {asset_id} AND PAGE_ID = {page_id}

このタイプのデータを構造化するためのより良い方法はありますか? 途中で合併症が起こる可能性があるように感じます。

4

3 に答える 3

3

4 つのテーブルを作成する

**USER**
USER_ID
USERNAME
[additional fields]

**ASSET**
ASSET_ID
USER_CHILD_ID
DISPLAY_NAME
[additional fields]

**PAGE**
PAGE_ID
ASSET_CHILD_ID
[additional fields]

**NOTE**
NOTE_ID
PAGE_CHILD_ID
NOTE_TEXT
[additional fields]

次に、データを取得するには、select ステートメントを記述します。

select NOTE_TEXT from NOTE inner join PAGE on PAGE_CHILD_ID = PAGE_ID inner join ASSET on ASSET_CHILD_ID = ASSET_ID where USER_CHILD_ID = :USERID 
于 2012-12-14T20:39:30.557 に答える
2

あなたの説明に基づいて、私は個人的に次のシナリオを使用します。

USER {UserID,User_Name},...;
ASSET {AssetID,DISPLAY_NAME,UserID (FK)};
PAGE {PageID,AssetID (FK)...};
NOTE {NoteID,Note,PageID (FK)};

次に、特定のユーザー、アセット、およびページからのメモを照会するには、次のようにします。

Select n.NOTE
From NOTE n
inner join PAGE p on p.ID=n.PageID
inner join ASSET a on a.AssetID=p.AssetID
inner join USER u on u.UserID=a.UserID
where u.UserId=x and p.PageID=y and a.AssetID=z

これは明らかに正規化された試みです。もちろん、それはすべてあなたの目標が何であるか、そして保存されると予想されるデータに依存します。データ量が少ない場合は、非正規化設計で十分です。ただし、大量のデータ、数百のページを持つ複数のアセットを持つ数百のユーザーがいる場合、USER_ASSET_PAGEテーブルの大幅な増加に直面する可能性があります。

私のアプローチは、「データ探索」よりも運用目的の方が適しています。後で、これらのテーブルに対していくつかの主要な集計を実行する必要がある場合は、行ったようにデータを非正規化し、いくつかの最適化も探すことをお勧めします。

于 2012-12-14T21:06:32.523 に答える
0

説明どおりにデータをモデル化するだけです。

さらに、各アセットは複数のページで構成されています

したがって、ASSET_IDtable に列を追加しますPAGE。PAGE は複数の ASSET 間で共有されていないと想定しています。

各ページには、そのユーザーだけが見ることができる複数のメモを含めることができます。

、、およびで新しいテーブルNOTEを作成します。NOTE_IDPAGE_IDUSER_IDNOTE

于 2012-12-14T20:32:59.303 に答える