0

これが以前に尋ねられた場合は申し訳ありませんが、質問を定式化する方法が思いつきませんでした。

2 つのドメインを使用するデータベース (特に amazon SimpleDB) があります。

  • ドメイン 1 には、いくつかの一般的な情報を含むユーザーのリストがあります。

  • ドメイン 2 は、アイテム情報を含むアイテムのリストです。

ドメイン 1 の特定のユーザーに属するすべてのアイテムを照会できるようにしたいと考えています。この場合、各アイテムは 1 人のユーザーにのみ属することができるため、ドメイン 2 の属性の 1 つは userID です。

知るまでは、ドメイン 1 にこのユーザーが持っているアイテムのリスト (item1&&item2&&item3&&... など) の属性を保持し、この属性を照会するのが最善の選択肢であると考えていました。これは非常に効率的だと思いますが、属性の制限が1024バイトであるため、最終的にスペースが不足することに気付きました(アイテム名が少し長いため)。

この場合、すべてのユーザー項目を取得するたびに、Domain2 で「select * where userID = something」を実行する必要があると考えましたが、これはあまり効率的ではないようです。(ローカル デバイスがクエリを実行する必要があるかどうか、またはローカルに最新バージョンがあるかどうかを確認するために、ドメイン 1 の最終更新とアイテム数を保持できます)。

どんなアドバイスも素晴らしいでしょう!

(または、データベースのスタックオーバーフローでこれを尋ねる必要がありますか?)

4

1 に答える 1

0

amazon-simpledb についてはわかりませんが、データベース用語では、2 つのテーブルがあります。1 つ目は、おそらく少なくともユーザー ID とユーザー名を格納する USERS のテーブルです。2 番目は、アイテム ID、アイテム名、およびその現在の所有者/ユーザーを格納する ITEMS のテーブルです。

ユーザーが所有するアイテムのリストをユーザー テーブルの区切りリストに格納する必要はありません。このリストをトラバースするのは苦痛です。それとは別に、データ (どのユーザーがどのアイテムを所有しているか) は既に items テーブルに存在します。

標準 SQL では、次のクエリを記述して、特定のユーザーが所有するアイテムのリストを取得します。

select items.name
from items inner join users
on items.user = users.id
where users.username = 'Luis'

標準データベースは、何百万ものエントリを持つテーブルを処理するように構築されているため、効率について心配する必要はありません (少なくとも、適切なインデックスを追加する限り、アイテム テーブルの「ユーザー」フィールドにインデックスが必要になります)。

于 2012-11-27T08:14:20.660 に答える