

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立資料表時，關聯式 (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)`：此資料表所需的每秒讀取及寫入數。DynamoDB 會保留足夠的儲存和系統資源，以便始終能满足您的輸送量需求。若有需要，您之後可以使用 `UpdateTable` 操作進行變更。因為儲存配置全由 DynamoDB 管理，因此您不需要指定資料表的儲存需求。