3つ以上の属性で項目を一意に識別できる場合のみ、DynamoDBで主キーを選択する方法はありますか?または、これはNOSQLデータベースを使用する正しい方法ではありませんか?アイテムが3つ以上の属性によって一意にしか特定できない場合、DynamoDBで主キーを選択する方法は?
答えて
一般に、アイテムが3つ以上の属性で一意に識別される場合は、属性値を連結し、Dynamo tbaleのハッシュキーとして使用できるコンポジット文字列キーを作成できます。
インデックスを作成する必要がある場合、または条件式で使用する必要がある場合、アイテムのハッシュキーの属性を別の属性に重複させることはできません。
リレーショナルデータベースの標準形式のルールは、必ずしもNoSQLデータベースには適用されません。実際、通常は非正規化スキーマが優先されます。
概念を拡張するために、正規化された形式を使用するリレーショナルデータベーススキーマを設計するのが一般的です(通常は望ましい)。正規化されたフォームの1つは、データベース内の同じ「もの」を表すデータを複製しないことを指示します。
私はキーに2つの部分しかない例を使用しますが、それをさらに拡張することができます。
たとえば、地理情報を含む表を設計しているとします。米国では、郵便番号は5桁と4桁の数字で構成され、地域を細分化することができます。ジップとPLUS4の組み合わせは一意であることが保証しているので、これは完璧ですZip, Plus4
の複合主キーを持つ
Zip | Plus4 | CityName | Population
---------+-----------+---------------+---------------
CHAR(5) | CHAR(4) | NVARCHAR(100) | INTEGER
:あなたは次のスキーマを使用する可能性があり、リレーショナル・データベースで
Zipと追加のPlus4コードの両方を持っているかどうかにかかわらず、このテーブルに対するクエリに答えることができます。また、すべてのPlus4コードを簡単に郵便番号のコードにすることもできます。
Dynamoに同じ情報を格納する場合は、 "ZipPlus4"という文字列型のハッシュキーを作成し、そのコードはPlus4コード(つまり60210-4598)と連結した郵便番号アイテムに2つ以上の属性を格納します。そのうちの1つはZipコードであり、もう1つはPlus4です。だからあなたのテーブル内の項目は以下の属性を持っているかもしれません:
ZipPlus4 | Zip | Plus4 | CityName | Population
-----------+---------+----------+-------------+---------------
String | String | String | String | Number
上記ZipPlus4
は、テーブルのハッシュキーになります。
上記の例では、ハッシュキー「Zip」と範囲キー「Plus4」を持っているが、2つ以上の部分があるときには、別のものが必要な場合があります。
ありがとうございます。「属性を重複除外する」と説明できますか? – wz366
@ wz366もう少し詳細を追加しました。これは、2つの部分からなるキーを使用する例ですが、3つの部分からなるキー –