

# Diferenças entre um banco de dados relacional (SQL) e o DynamoDB ao criar uma tabela
<a name="SQLtoNoSQL.CreateTable"></a>

As tabelas são as estruturas de dados fundamentais em bancos de dados relacionais e no Amazon DynamoDB. Um Relational Database Management System (RDBMS – Sistema de gerenciamento de banco de dados relacional) exige que você defina o esquema da tabela ao criá-la. Por outro lado, as tabelas do DynamoDB não têm esquemas: além da chave primária, não é necessário definir nenhum atributo ou tipo de dados extras ao criar uma tabela.

A seção a seguir compara como você criaria uma tabela com o SQL e como a criaria com o DynamoDB.

**Topics**
+ [

## Criar uma tabela com o SQL
](#SQLtoNoSQL.CreateTable.SQL)
+ [

## Criar uma tabela com o DynamoDB
](#SQLtoNoSQL.CreateTable.DynamoDB)

## Criar uma tabela com o SQL
<a name="SQLtoNoSQL.CreateTable.SQL"></a>

Com o SQL, você usa a instrução `CREATE TABLE` para criar uma tabela, conforme mostrado no exemplo a seguir.

```
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)
);
```

A chave primária dessa tabela consiste em *Artist* e *SongTitle*.

Você deve definir todas as colunas e os tipos de dados da tabela, e a chave primária da tabela. (Você pode usar a instrução `ALTER TABLE` para alterar essas definições mais tarde, se necessário.)

Muitas implementações de SQL permitem que você defina especificações de armazenamento para a sua tabela, como parte da instrução `CREATE TABLE`. A não ser que você indique de outra forma, a tabela é criada com configurações de armazenamento padrão. Em um ambiente de produção, um administrador de banco de dados pode ajudar a determinar os parâmetros de armazenamento ideais.

## Criar uma tabela com o DynamoDB
<a name="SQLtoNoSQL.CreateTable.DynamoDB"></a>

Use a operação `CreateTable` para criar uma tabela de modo provisionado, especificando parâmetros conforme mostrado abaixo:

```
{
    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
    }
}
```

A chave primária dessa tabela consiste em *Artist* (chave de partição) e *SongTitle* (chave de classificação).

Você deve fornecer os parâmetros a seguir para `CreateTable`:
+ `TableName`: nome da tabela.
+ `KeySchema`: os atributos que são usados para a chave primária. Para obter mais informações, consulte [Tabelas, itens e atributos](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.TablesItemsAttributes) e [Chave primária](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey).
+ `AttributeDefinitions`: os tipos de dados dos atributos de esquema de chaves.
+ `ProvisionedThroughput (for provisioned tables)`: o número de leituras e gravações por segundo que você precisa para esta tabela. O DynamoDB reserva recursos do sistema e de armazenamento suficientes para que seus requisitos de throughput sejam sempre atendidos. Você pode usar a operação `UpdateTable` para alterar essas configurações mais tarde, se necessário. Você não precisa especificar os requisitos de armazenamento de uma tabela porque a alocação de armazenamento é gerenciada inteiramente pelo DynamoDB.