Você está na página 1de 4

SQL - DDL

1 Definio
Linguagem comercial mais utilizada no mercado SQL Combinao de construtores em lgebra relacional Linguagem mais fcil de consulta Partes Linguagem de definio de Dados (Data-Definition Language DDL) Comandos para a definio de esquemas. Linguagem Interativa de Manipulao de Dados (Data-Manipulaiton Language DML). Linguagem de consulta baseada em lgebra relacional. Incorporao DML (Embedded DML). SQL incorporados a linguagens de programao. Definies de vises. A SQL DDL possui comandos para definio. Autorizao A SQL DDL engloba comandos para especificao de diretos de acesso. Integridade. A SQL DDL possui comandos para especificao de regras de integridade. Controle de transaes. A SQL inclui comandos para a especificao de transaes. Para DML e DDL iremos considerar uma empresa na rea bancria que possui as seguintes relaes: Cidade = (nome_cidade, estado_cidade) Agencia = (nome_agencia, cidade_agencia, fundos) Cliente = (nome_cliente, rua_cliente, cidade_cliente) Emprestimo = (nome_agencia, numero_emprestimo, total) Devedor = (nome_cliente, numero_emprestimo) Conta = (nome_agencia, numero_conta, saldo) Depositante = (nome_cliente, numero_conta)

2 Linguagem de Definio de Dados


O conjunto de Relaes(Tabelas) em um banco de dados deve ser especificado para o sistema por meio de uma linguagem de definio de dados(DDL). A SQL DDL permite no s a especificao de um conjunto de relaes, como tambm informaes acerca de cada uma das relaes, incluindo: esquema de cada relao. domnio dos valores associados a cada atributo. As regras de integridade. conjunto de ndices para manuteno de cada relao. Informaes sobre segurana e autoridade sobre cada relao. A estrutura de armazenamento fsico de cada relao no disco.

2.1

Tipos de Domnios em SQL

O padro SQL-92 aceita uma variedade de tipos de domnios embutidos, incluindo os seguintes: char(n) uma cadeia de caracteres de tamanho fixo, com o tamanho n definido pelo usurio. Pode ser usada a sua forma completa character. varchar(n) uma cadeia de caracteres de tamanho varivel, com o tamanho n mximo definido pelo usurio (character varying). Int um inteiro (um subconjunto finito de inteiros que depende do equipamento)(integer). smallint um inteiro pequeno (um subconjunto do domnio dos tipos inteiros que depende do equipamento). numeric(p,d) um nmero de ponto fixo cuja preciso definida pelo usurio. O nmero consiste de p dgitos (mais o sinal), sendo que d dos p dgitos esto a direita do ponto decimal. Assim, numeric(3,1) permite que 44,5 seja armazenado. real, double precision - so nmeros de ponto flutuante e ponto flutuante de preciso dupla cuja preciso depende do equipamento. float(n) - um nmero de ponto flutuante com preciso definida pelo usurio em pelo menos n dgitos. date - um calendrio contendo um ano (com quatro dgitos), ms e dia do ms. 1

time representa horrio, em horas, minutos e segundos.

A SQL-92 permite que a declarao de domnio de um atributo inclua a especificao de not null, proibindo, assim, a insero de valores nulos para este tipo de atributo.

2.2

Definio de Domnios
create domain nome_pessoa char(20)

A SQL-92 permite definir domnios usando a clusula create domain, como mostra o exemplo:

Podemos ento usar o domnio de nome em nome_pessoa para definir o tipo de um atributo com um domnio exato embutido. A clusula check da SQL-92 permite modos poderos de restries de domnios que a maioria dos sistemas de tipos de linguagens de programao no permite. Especificamente a clusula check permite ao projeto do esquema determinar um predicado que deva ser satisfeito por qualquer valor designado a uma varivel cujo tipo seja o domnio. Por exemplo uma clusula check pode garantir que o domnio relativo ao salrio de um funcionrio contenha somente valores maiores que 0. create domain salario_funcionario numeric(10,2) constraint teste_salario_funcionario check (value > 0) A clusula check pode ser usada para restringir os valores nulos em um domnio: create domain codigo_cliente int constraint teste_nulo_codigo_cliente check (value not null) Como outro exemplo, o domnio pode ser restrito a determinado conjunto de valores por meio do uso da clsula in: create domain estado_civil char(20) constraint teste_estado_civil check (value in (Casado,Solteiro,Separado)) A clusula constraint opcional e suada para dar um nome a restrio. O nome usado para indicar quais restries foram violadas em determinada atualizao. A clusula check pode ser mais complexa, dado que so permitidas subconsultas que se refiram a outras relaes na codio check. Por exemplo, a seguinte codio check poderia ser especificada na relao deposito: Check (nome_agencia in (select nome_agencia from agencia))

2.3

Definio de Esquema em SQL

Definimos uma relao SQL usando o comando create table: create table r (A1 D1, A2 D2, ..., An Dn, < regras de integridade 1>, < regras de integridade 2>, ..., < regras de integridade n>) em que r o nome da relao, cada Ai o nome de um atributo no esquema da relao r e Di o tipo de domnio dos valores no domnio dos atributos Ai. As regras de Integridade permitidas englobam: primary key(Aj1, Aj2, ..., Ajm) check (P) foreign key(Aj1, Aj2, ..., Ajm) references r A especificao primary key diz que os atributos Aj1, Aj2, ..., Ajm formam a chave primria da relao. 2

A clusula check especifica um predicado P que precisa ser satisfeito por todas as tuplas em uma relao. A clusula foreing key inclui a relao dos atributos que constituem a chave estrangeira (Aj1, Aj2, ..., Ajm) quanto o nome da relao qual a chave estrangeira faz referncia(r). Todos os atributos de uma chave primria so declarados implicitamente como not null. Atributos de uma declarao que seja unique (isto , atributos de uma chave candidata) tem a garantia de unicidade deste valor para todos as tuplas. Para cada conjunto Ai Di pode ser atribuido a palavra default que especifica um valor default para este atributo na incluso de uma nova tupla. Definio do banco de dados de exemplo: create domain tipo_nome_cidade char(30) constraint teste_nome_cidade check (value not null) create table cliente ( nome_cliente char(20) not null, rua_cliente char(30) not null, cidade_cliente tipo_nome_cidade, primary key (nome_cliente)) create table agencia ( nome_agencia char(15) not null, cidade_agencia tipo_nome_cidade, fundos numeric(10,2) default 20, primary key(nome_agencia), check (fundos >=20)) create table emprestimo(numero_emprestimo int not null, nome_agencia char(15) not null, total numeric(10,2), primary key(numero_emprestimo), foreing key (nome_agencia) references agencia, check (total > 0)) create table devedor ( nome_cliente char(20) not null, numero_emprestimo int not null, primary key (nome_cliente, numero_emprestimo), foreing key (nome_cliente) references cliente, foreing key (numero_emprestimo) references emprestimo) ( numero_conta int not null, nome_agencia char(15), saldo numeric(10,2) default 0, primary key (numero_conta), foreing key (nome_agencia) references agencia) null, numero_conta), references cliente, references conta)

create table conta

create table depositante(nome_cliente char(20) not numero_conta int not null, primary key (nome_cliente, foreing key (nome_cliente) foreing key (numero_conta)

2.3.1 Remoo de Tabelas


O comando drop table remove todas as informaes de uma relao do banco de dados. drop table r

2.3.2 Adio de Atributos


Usamos o comando alter table em SQL-92 para adicionar atributos a uma relao existente. Todas as tuplas da relao recebem valores nulos para seu novo atributo. alter table r add A D Onde r o nome da relao existente, A o nome do novo atributo que ser adicionado e D seu domnio.

2.3.3 Remoo de Atributos


Podemos remover atributos de uma relao usando o comando alter table r drop A

2.4

Definio de ndice

Um ndice criado pelo comando create index, que tem a seguinte forma: Create index <nome_indice> on <nome_relao> (<lista_atributos>) Para definir um ndice chamado ndice_b na relao agencia com nome_agencioa como chave de procura, escrevemos: Create index indice_b on agencia (nome_agencia) Se desejarmos declarar que a chave de procura uma chave candidata, adicionamos o atributo unique definio do ndice.O comando fica assim: Create unique index indice_b on agencia (nome_agencia)

2.4.1 Remoo de ndices


Para remover um ndice utilizado o comando drop index. Para remover o ndice da tabela agncia chamado indice_b, temos o seguinte comando. drop index indice_b

2.5

Metadados

2.5.1 Listando as tabelas Criadas


Select Table_Name from Tabs;

2.5.2 Listando os Nomes as Restries


select constraint_name from user_constraints;

Você também pode gostar