# Linguagem de definição de dados

Linguagem de definição de dados (DDL, do Inglês Data Definition Language) é uma linguagem de computador usada para a definição de estruturas de dados. O termo foi inicialmente introduzido em relação ao modelo de banco de dados Codasyl, onde o esquema de banco de dados era escrito em uma Linguagem de Definição de Dados descrevendo os registros, campos e "conjuntos" que constituíam o Modelo de dados do usuário. Inicialmente referia-se a um subconjunto da SQL, mas hoje é usada em um sentido genérico para referir-se a qualquer linguagem formal para descrição de estruturas de dados ou informação, assim como esquemas.
Uma vez compilados, os parâmetros DDL são armazenados num conjunto de arquivos denominado dicionário de dados (ou catálogo). O dicionário de dados contém os metadados (dados a respeito das estruturas de armazenamento). O SGBD sempre consulta os metadados a cada operação sobre o banco de dados. Por exemplo, um determinado programa precisa recuperar alguns campos (nome, CPF) de um arquivo de clientes. O SGBD irá verificar se os campos "nome" e "CPF" estão definidos para este arquivo. O interpretador DDL processa os comandos alimentados pelos DBAs na definição dos esquemas.

## Sql

Um subconjunto de instruções SQL formam outra 'DDL'. Estas declarações SQL definem a estrutura de um banco de dados, incluindo linhas, colunas, tabelas, índices e características específicas do banco de dados, tal como localizações de arquivos. Declarações DDL SQL fazem mais parte do SGBD e possuem grandes diferenças entre as variações da SQL. Comandos DDL SQL incluem os seguintes:

### Declarações Create

Create - utilizada para construir um novo banco de dados, tabela, índice ou consulta armazenada. Uma declaração CREATE, em SQL, cria um objeto dentro do Sistema de Gerenciamento de Banco de Dados Relacional (SGBDR). Os tipos de objetos que podem ser criados dependem de qual SGBDR está sendo utilizado, porém a maioria suporta a criação de tabelas, índices, usuários e banco de dados. Alguns sistemas (tais como PostgreSQL) suportam o comando CREATE, e outros comandos DDL, dentro de uma transação e portanto suportam rollback.

#### Create Table

Talvez o comando mais comum da declaração CREATE seja o comando CREATE TABLE. A sintaxe típica é: CREATE [TEMPORARY] TABLE [nome da tabela] ([definições de colunas]) [parâmetros da tabela]
Definições de colunas: Uma lista separada por vírgulas consistindo de qualquer uma das seguintes
* Definição de coluna: [nome da coluna] [tipo de dado] {NULL|NOT NULL} {opções de coluna}
* Definição de chave primária: PRIMARY KEY([lista de colunas separadas por vírgulas])
* CONSTRAINTS:{CONSTRAINT} [definição de limite]
* Funcionalidade específica de SGBDR
Por exemplo, o comando para criação de uma tabela chamada empregados com algumas colunas seria:
Atenção!, Esse comando pode mudar de acordo com o SGBDR.

### Declarações Drop

Drop - remove um banco de dados, tabela, índice ou visão existente.
Uma declaração DROP em SQL remove um objeto de um sistema de gerenciamento de banco de dados relacional(SGBDR). Os tipos de objetos que podem ser removidos dependem de qual SGBDR esté sendo usado, mas a maioria suporta a exclusão de tabelas, usuários e banco de dados. Alguns sistemas (tais como o PostgreSQL) permitem que DROP e outros comandos ocorram dentr uma transação e portanto suportem roll back.
Um uso típico é DROP tipo_do_objeto nome_do_objeto. Por exemplo, o comando para excluir uma tabela chamada empregados seria:
A declaração DROP é diferente das declarações DELETE e (não padronizada) TRUNCATE, em que estas não removem a tabela, de fato. Por exemplo, uma declaração DELETE poderia deletar alguns (ou todos) dados da tabela enquanto deixaria a tabela propriamente dita no banco de dados, enquanto que uma declaração DROP removeria a tabela inteira do banco de dados.

### Declarações ALTER

Alter - Modifica um objeto existente do banco de dados.
Uma declaração ALTER em SQL altera as propriedades de um objeto dentro de um sistema de gerenciamento de banco de dados relacional (SGBDR). Os tipos de objetos que podem ser alterados dependem de qual SGBDR está sendo usado.
Um uso comum é ALTER tipo_do_objeto nome_do_objeto parametros. Por exemplo, o comando para adicionar(e então remover) uma coluna chamada bolhas para uma tabela existente chamada pia seria:

### Declarações TRUNCATE

Truncate - Esvazia imediatamente todo o conteúdo de uma tabela ou objeto que contenha dados. É muito mais rápido que um comando DELETE, pois, ao contrário deste, não armazena os dados sendo removidos no log de transações. Por esse motivo, em vários SGBDs é um comando não-transacional e irrecuperável, não sendo possível desfazê-lo com ROLLBACK.

### Declarações de integridade referencial

Finalmente, outro tipo de sentença DDL em SQL são as declarações para definição de relacionamentos de integridade referencial, comumente implementadas como tags chaves primárias e chaves estrangeiras em algumas colunas das tabelas. Estas duas declarações podem ser incluídas dentro de uma sentença CREATE TABLE ou ALTER TABLE.

## Esquema XML

Esquema XML é um exemplo de uma DDL pura(apesar de ser relevante apenas no contexto de XML).

## Ferramentas DDL e Aplicações Relacionadas
### Apache DdlUtils

* «Apache DdlUtils» é um componente simples e pequeno para se trabalhar com arquivos de Definição de Banco de dados(DDL). Estes são arquivos XML que contêm a definição de um esquema de banco de dados, por exemplo tabelas e colunas. Estes arquivos podem ser alimentados em DdlUtils através de uma tarefa de Ant ou programavelmente a fim de criar o banco de dados correspondente ou alterá-lo para que ele corresponda à DDL. Igualmente, DdlUtils pode gerar um arquivo DDL para um banco de dados existente.