

# テーブルにデータを書き込むときのリレーショナル (SQL) データベースと DynamoDB の相違点
<a name="SQLtoNoSQL.WriteData"></a>

リレーショナルデータベースのテーブルには、データの*行*が含まれます。行は*列*で構成されます。Amazon DynamoDB テーブルには、*項目*が含まれています。項目は*属性*で構成されます。

このセクションでは、テーブルに 1 つの行 (または項目) を書き込む方法を説明します。

**Topics**
+ [

## SQL を使ってテーブルにデータを書き込む
](#SQLtoNoSQL.WriteData.SQL)
+ [

## DynamoDB のテーブルにデータを書き込む
](#SQLtoNoSQL.WriteData.DynamoDB)

## SQL を使ってテーブルにデータを書き込む
<a name="SQLtoNoSQL.WriteData.SQL"></a>

リレーショナルデータベースのテーブルは、行と列で構成される、2 つのディメンションのデータ構造です。一部のデータベース管理システムは、通常、ネイティブ JSON または XML データ型を使用する半構造化データのサポートを提供します。ただし、実装の詳細はベンダー間で変わります。

SQL では、`INSERT` ステートメントを使用して、テーブルに行を追加します。

```
INSERT INTO Music
    (Artist, SongTitle, AlbumTitle,
    Year, Price, Genre,
    Tags)
VALUES(
    'No One You Know', 'Call Me Today', 'Somewhat Famous',
    2015, 2.14, 'Country',
    '{"Composers": ["Smith", "Jones", "Davis"],"LengthInSeconds": 214}'
);
```

このテーブルのプライマリキーは、*Artist* と *SongTitle* で構成されます。これらの列の値を指定する必要があります。

**注記**  
この例では、*Tags* 列を使用して、*Music* テーブル内の曲に関する半構造化データを保存します。*Tags* 列は TEXT 型として定義され、MySQL で最大 65,535 文字を保存できます。

## DynamoDB のテーブルにデータを書き込む
<a name="SQLtoNoSQL.WriteData.DynamoDB"></a>

Amazon DynamoDB では、DynamoDB API または [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html) (SQL 互換のクエリ言語) を使用して、テーブルに項目を追加できます。

------
#### [ DynamoDB API ]

DynamoDB API では、`PutItem` オペレーションを使用して、テーブルに項目を追加します。

```
{
    TableName: "Music",
    Item: {
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today",
        "AlbumTitle":"Somewhat Famous",
        "Year": 2015,
        "Price": 2.14,
        "Genre": "Country",
        "Tags": {
            "Composers": [
                  "Smith",
                  "Jones",
                  "Davis"
            ],
            "LengthInSeconds": 214
        }
    }
}
```

このテーブルのプライマリキーは、*Artist* および *SongTitle* で構成されます。これらの属性の値を指定する必要があります。

この `PutItem` 例に関する主要事項を示します。
+ DynamoDB では、JSON を使用して、ドキュメントのネイティブサポートを提供しています。これにより DynamoDB は *Tags* などの半構造化データを保存する場合に最適になります。また、JSON ドキュメント内からデータを取得および操作できます。
+ *Music* テーブルには、プライマリキー (*Artist* および *SongTitle*) 以外には事前定義された属性はありません。
+ ほとんどの SQL データベースはトランザクション指向です。`INSERT` ステートメントを発行すると、データ変更は、`COMMIT` ステートメントを発行するまで永続的ではありません。Amazon DynamoDB によって、`PutItem` オペレーションの効果は、DynamoDB が HTTP 200 ステータスコード (`OK`) で応答する場合、永続的になります。

次に、`PutItem` の他の例をいくつか示します。

```
{
    TableName: "Music",
    Item: {
        "Artist": "No One You Know",
        "SongTitle": "My Dog Spot",
        "AlbumTitle":"Hey Now",
        "Price": 1.98,
        "Genre": "Country",
        "CriticRating": 8.4
    }
}
```

```
{
    TableName: "Music",
    Item: {
        "Artist": "No One You Know",
        "SongTitle": "Somewhere Down The Road",
        "AlbumTitle":"Somewhat Famous",
        "Genre": "Country",
        "CriticRating": 8.4,
        "Year": 1984
    }
}
```

```
{
    TableName: "Music",
    Item: {
        "Artist": "The Acme Band",
        "SongTitle": "Still In Love",
        "AlbumTitle":"The Buck Starts Here",
        "Price": 2.47,
        "Genre": "Rock",
        "PromotionInfo": {
            "RadioStationsPlaying":[
                 "KHCR", "KBQX", "WTNR", "WJJH"
            ],
            "TourDates": {
                "Seattle": "20150625",
                "Cleveland": "20150630"
            },
            "Rotation": "Heavy"
        }
    }
}
```

```
{
    TableName: "Music",
    Item: {
        "Artist": "The Acme Band",
        "SongTitle": "Look Out, World",
        "AlbumTitle":"The Buck Starts Here",
        "Price": 0.99,
        "Genre": "Rock"
    }
}
```

**注記**  
`PutItem` に加えて、DynamoDB は、同時に複数の項目に書き込むための `BatchWriteItem` オペレーションもサポートします。

------
#### [ PartiQL for DynamoDB ]

PartiQL では、PartiQL `ExecuteStatement` ステートメントを利用する `Insert` オペレーションを使用して、テーブルに項目を追加します。

```
INSERT into Music value {  
    'Artist': 'No One You Know',
    'SongTitle': 'Call Me Today',
    'AlbumTitle': 'Somewhat Famous',
    'Year' : '2015',
    'Genre' : 'Acme'
}
```

このテーブルのプライマリキーは、*Artist* および *SongTitle* で構成されます。これらの属性の値を指定する必要があります。

**注記**  
`Insert` と `ExecuteStatement` を使用したコード例については、[DynamoDB 用の PartiQL 挿入ステートメント](ql-reference.insert.md) を参照してください。

------