

# テーブル作成時のリレーショナル (SQL) データベースと DynamoDB の相違点
<a name="SQLtoNoSQL.CreateTable"></a>

テーブルは、リレーショナルデータベースおよび Amazon DynamoDB の基本的なデータ構造です。リレーショナルデータベース管理システム (RDBMS) では、作成時に、テーブルのスキーマを定義する必要があります。対照的に、DynamoDB テーブルはスキーマレスであるため、プライマリキーを除いて、テーブルを作成する際に、追加の属性やデータ型を定義する必要はありません。

次のセクションでは、SQL を使用してテーブルを作成する方法と、DynamoDB を使用してテーブルを作成する方法を比較します。

**Topics**
+ [SQL を使用してテーブルを作成する](#SQLtoNoSQL.CreateTable.SQL)
+ [DynamoDB を使用してテーブルを作成する](#SQLtoNoSQL.CreateTable.DynamoDB)

## SQL を使用してテーブルを作成する
<a name="SQLtoNoSQL.CreateTable.SQL"></a>

SQL では、次の例に示すように、`CREATE TABLE` ステートメントを使用して、テーブルを作成します。

```
CREATE TABLE Music (
    Artist VARCHAR(20) NOT NULL,
    SongTitle VARCHAR(30) NOT NULL,
    AlbumTitle VARCHAR(25),
    Year INT,
    Price FLOAT,
    Genre VARCHAR(10),
    Tags TEXT,
    PRIMARY KEY(Artist, SongTitle)
);
```

このテーブルのプライマリキーは、*Artist* および *SongTitle* で構成されます。

テーブルの列とデータ型すべて、およびテーブルのプライマリキーを定義する必要があります。(これらの定義は、`ALTER TABLE` ステートメントを使用して、必要に応じて後で変更することができます。)

多くの SQL 実装では、`CREATE TABLE` ステートメントの一部として、テーブルのストレージ仕様を定義することができます。他に明記されていない限り、テーブルはデフォルトのストレージ設定で作成されます。本稼働環境では、データベース管理者は最適なストレージパラメータを特定することもできます。

## DynamoDB を使用してテーブルを作成する
<a name="SQLtoNoSQL.CreateTable.DynamoDB"></a>

`CreateTable` オペレーションを使用してプロビジョニングモードのテーブルを作成し、次に示すように、パラメータを指定します。

```
{
    TableName : "Music",
    KeySchema: [
        {
            AttributeName: "Artist",
            KeyType: "HASH" //Partition key
        },
        {
            AttributeName: "SongTitle",
            KeyType: "RANGE" //Sort key
        }
    ],
    AttributeDefinitions: [
        {
            AttributeName: "Artist",
            AttributeType: "S"
        },
        {
            AttributeName: "SongTitle",
            AttributeType: "S"
        }
    ],
    ProvisionedThroughput: {       // Only specified if using provisioned mode
        ReadCapacityUnits: 1,
        WriteCapacityUnits: 1
    }
}
```

このテーブルのプライマリキーは、*Artist* (パーティションキー) および *SongTitle* (ソートキー) で構成されています。

`CreateTable` に以下のパラメータを提供する必要があります。
+ `TableName` – テーブルの名前。
+ `KeySchema` – プライマリキーに使用する属性。詳細については、「[テーブル、項目、属性](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.TablesItemsAttributes)」および「[プライマリキー](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey)」を参照してください。
+ `AttributeDefinitions` – キースキーマ属性のデータ型。
+ `ProvisionedThroughput (for provisioned tables)` – このテーブルに必要な 1 秒あたりの読み取り/書き込み数。DynamoDB は、スループット要件を常に満たすように、十分なストレージとシステムリソースを確保しています。これらは、`UpdateTable` オペレーションを使用し、必要に応じて後で変更できます。DynamoDB がストレージ割り当てを完全に管理しているため、テーブルのストレージ要件を指定する必要はありません。