複合プライマリ・キーの使用

クエリーに対してソートされた結果を返すカラムを作成するには、複合プライマリ・キーを使用します。

クエリーを実行しソートされた結果を返すために使用できる複数のカラムを作成するには、複合プライマリ・キーを使用します。プロ・サイクリングの例がリレーショナル・データベースで設計されている場合は、レースに対する外部キーを使用してサイクリスト・テーブルを作成します。分散システムで結合を使用すると効率的でないため、DataStax Enterpriseではデータを非正規化します。後ほど、データベースのパフォーマンスを向上させるその他のスキーマを紹介します。コレクションとインデックスはどちらもデータ・モデリング方法です。この例では、レースのcategoryのタイプごとに、サイクリストのlast nameID、およびpointsを格納するcyclist_categoryテーブルを作成します。テーブルは、パーティション・キーにcategoryを使用し、1つのクラスター化カラムにpointsを使用します。このテーブルをクエリーして、pointsでソートしたカテゴリー内のサイクリストのリストとそれらのpointsを取得できます。

複合プライマリ・キー・テーブルは、次に示すように2通りの異なる方法で作成できます。

手順

  • 複合プライマリ・キーを持つテーブルを作成するには、複数のカラムをプライマリ・キーとして使用します。この例では、追加の句WITH CLUSTERING ORDER BYを使用してポイントを降順に並べます。格納するには昇順の方が効率的ですが、ストレージ・エンジンの性質上、降順のクエリーの方がより迅速に実行できます。
    cqlsh> USE cycling;
    CREATE TABLE cyclist_category ( 
    category text, 
    points int, 
    id UUID, 
    lastname text,     
    PRIMARY KEY (category, points)
    ) WITH CLUSTERING ORDER BY (points DESC);
    注: categorypointsの組み合わせにより、cyclist_categoryテーブル内の行を一意に特定することができます。行にそれぞれ異なるpoints値が含まれている限り、同じcategoryの行が複数存在することができます。
  • USE文の代わりに、CREATE TABLE文でキースペース名を使用してキースペースを指定できます。
    CREATE TABLE cycling.cyclist_category ( 
    category text, 
    points int, 
    id UUID, 
    lastname text,     
    PRIMARY KEY (category, points)
    ) WITH CLUSTERING ORDER BY (points DESC);
    注: 上記の例ではどちらも、pointsがクラスター化カラムとして定義されています。