Acetatos aulas compilados e em formato redzido

Propaganda
UNIVERSIDADE DE TRÁS-OS-MONTES E ALTO DOURO
BASE DE DADOS
ACETATOS AULAS TEÓRICAS
Por Paulo Martins
AFG v1
1
3.1 Introdução aos Sistemas de Bases de Dados
Base de Dados


Uma vez que o constituinte central de qualquer sistema de informação é a sua memória (conjunto
armazenado de dados), a “solução informática”, para qualquer organização, deve assentar num
depósito integrado de dados – a base de dados.
Uma base de dados é, por definição, um conjunto organizado de dados, disponível a todos os
utilizadores ou processamentos da organização que deles tenham necessidade.
Dados vs. Informação



Dados são apenas elementos ou valores discretos que, isoladamente, não têm qualquer valor, só se
transformam em informação quando relacionados ou interpretados de alguma forma.
Para que possa ser utilizada como apoio eficaz à tomada de decisão nas organizações, a informação só
tem valor se se verificarem, simultaneamente, algumas condições: actualidade, correcção, relevância,
disponibilidade e legibilidade.
De entre as tecnologias da informação, a tecnologia das bases de dados tem, neste contexto, um
interesse particular.
Sistemas de Gestão de Ficheiros












Os antecessores, em termos de evolução tecnológica, dos modernos sistemas de bases de dados foram
os sistemas de gestão de ficheiros.
Utilizando sistemas de gestão de ficheiros, as organizações começaram por automatizar algumas das
tarefas até aí realizadas manualmente.
Os processos continuavam a ser executados, no essencial, da mesma forma, só que mais rapidamente.
É vulgar encontrar situações de replicação de um mesmo documento, cada um deles com um destino e
um processamento diferentes.
Os sistemas surgiam no panorama informático das organizações sem qualquer relação com os sistemas
já existentes, constituindo “ilhas isoladas” entre si.
Os dados como são actualizados, independentemente, pelas respectivas aplicações, existem grandes
probabilidades de ocorrerem incoerências – redundância não controlada.
Apesar de ser possível com a tecnologia de sistemas de gestão de ficheiros desenvolver um outro tipo
de solução, segundo a qual, todos os dados necessários às várias aplicações são organizados num único
conjunto de ficheiros, acessível a todas elas, verifica-se que a estrutura física dos dados e a sua
organização nos ficheiros é parte integrante da lógica dos programas.
Consequência grave: basta que ocorra uma alteração na estrutura dum ficheiro para que essa alteração
se propague, necessariamente, para todas as aplicações que o utilizam – a partilha de dados apresenta
problemas ao nível da manutenção dos próprios sistemas.
Outra consequência grave: o acesso concorrente aos dados partilhados tem de ser feito ao nível das
próprias aplicações, utilizando funções de baixo-nível disponibilizadas pelo sistema operativo – o que
vem pôr em causa a fiabilidade dos próprios sistemas.
Os sistemas de bases de dados surgem como tentativa de resolver estes problemas.
A abordagem pelos sistemas de bases de dados tem uma característica fundamental – os dados são
organizados num único conjunto. Isto é, em vez de estarem separados por várias unidades
independentes, os dados encontram-se integrados numa só unidade (lógica) de armazenamento.
Todos os acessos aos dados passam sempre por uma entidade designada Sistema de Gestão de Bases
de Dados (SGBD), que centraliza em si o acesso físico à base de dados.
2

A interface lógica entre o nível aplicacional e a base de dados é conseguida à custa do armazenamento
na base de dados, não só dos dados propriamente ditos, mas também das suas descrições
(metadados), numa entidade conhecida por dicionário de dados (também chamado catálogo).
1.1. Sistema de Gestão de Bases de Dados
Por definição, o Sistema de Gestão de Bases de Dados (SGBD), em inglês Database Management System
(DBMS), é um conjunto de software, destinado a gerir todo o armazenamento e manipulação dos dados do
sistema, fazendo a interface entre o nível aplicacional e a base de dados propriamente dita.

O SGBD:
o “Esconde” os detalhes de armazenamento físico dos dados;
o Proporciona ao nível aplicacional um grau de abstracção elevado.
Conceito de Transacção



É um dos conceitos mais importantes num sistema de base de dados. Praticamente todas as tarefas de
gestão de base de dados vivem à custa deste conceito.
Exemplo típico: transferência de valores entre duas contas bancárias.
o Debitar de A e creditar em B.
o Só a sua execução conjunta produz um resultado válido.
Por definição, uma transacção é um conjunto de operações sobre a base de dados, perfeitamente
delimitado, que exibe algumas características importantes:
o Atomicidade (Atomicity) – o conjunto de operações que constituem uma transacção formam um
grupo indivisível (atómico), no sentido em que ou todas elas são executadas com sucesso ou
nenhuma é executada.
o Consistência (Consistency) – uma transacção, se envolver actualização de dados, deve transportar a
base de dados de um estado de integridade para outro estado também de integridade.
o Isolamento (Isolation) – apesar de as transacções executarem concorrentemente, o sistema deve
dar a cada transacção a ilusão de que é a única a executar no sistema – executa isoladamente das
outras.
o Durabilidade (Durability) – o sistema deve assegurar que todos os efeitos provocados por uma
transacção bem sucedida se tornam persistentes na base de dados e visíveis para as outras
transacções.

Estas 4 características são conhecidas na literatura inglesa por ACID (Atomicity, Consistency, Isolation
and Durability).
3
Requisitos Fundamentais de um SGBD




Segurança – O objectivo das medidas de segurança dos sistemas de bases de dados é proteger os
dados armazenados de acessos não autorizados, garantindo que apenas os utilizadores autorizados
acedem ao sistema, de acordo com os seus privilégios – através de perfis ou contas.
Integridade – Por definição, uma base de dados está num estado de integridade se contém apenas
dados válidos, isto é, que não contradizem a realidade que estão a representar, antes a reflectem
correctamente.– “A definição das restrições de integridade pode representar 90% das especificações de
uma base de dados típica.”
Controlo da concorrência – Um dos pressupostos fundamentais dos sistemas de bases de dados é a
partilha dos dados armazenados pelo nível aplicacional. O controlo da concorrência relaciona-se com a
coordenação dessa partilha por várias aplicações e utilizadores. Trata-se, portanto, de um problema
específico dos sistemas de bases de dados multiutilizador e a ideia principal é garantir que cada
utilizador ou aplicação interage com a base de dados como se fosse o único a utilizar os seus serviços. A
unidade base do controlo da concorrência é a transacção.
Recuperação/tolerância a falhas – É a actividade que tem por objectivo o restaurar da base de dados,
após a ocorrência de uma qualquer falha, para um estado de integridade garantido. Mecanismos de
recuperação: backups e transaction logs.
Arquitectura ANSI/SPARC
•
Numa tentativa de estabelecer um padrão para toda a indústria de desenvolvimento de tecnologia de
bases de dados, foi proposto pela American National Standards Institute (ANSI), nomeadamente pelo
seu Standards Planning and Requirements Committee (SPARC), uma arquitectura de três níveis
independentes (arquitectura ANSI/SPARC), cada uma delas descrevendo a base de dados a um nível
diferente de abstracção.
•
Nível interno. Armazenamento físico dos dados e definição das estruturas físicas que permitem obter
um bom nível de desempenho.
Nível conceptual. Representação do modelo conceptual de dados, independentemente de qualquer
utilizador ou aplicação em particular, constituindo o chamado esquema conceptual ou estrutura da
base de dados. Esta camada esconde os detalhes de implementação física dos ficheiros que armazenam
os dados.
Nível externo. Definição de “vistas” sobre o esquema conceptual da base de dados. Permite trabalhar
apenas com uma parte dos dados que tenha interesse para um determinado utilizador ou aplicação em
particular.
•
•
•
Este tipo de arquitectura permite:
o Independência física. Alterações no nível interno não se repercutem no nível conceptual.
o Independência lógica. Alterações no nível conceptual não interferem, de forma obrigatória, com as
“vistas” estabelecidas no nível externo.
4
Utilizadores de Sistemas de Bases de Dados


Administrador da base de dados – É o responsável máximo pelo bom funcionamento de todo o
sistema. Tem como principais responsabilidades a especificação do esquema conceptual da base de
dados e a sua manutenção.
Utilizadores – Podem-se distinguir 2 tipos de utilizadores:
o Utilizadores finais – São a razão de existir da base de dados. Acedem ao sistema para
consultar, adicionar, alterar ou remover dados (debaixo das respectivas condições de acesso),
não poderão nunca é alterar a estrutura da base de dados (esquema conceptual).
o Programadores – Utilizando linguagens de alto nível e tendo por base “vistas” sobre o esquema
conceptual da base de dados, desenvolvem as aplicações que os utilizadores finais irão depois
utilizar.
1.2. Modelos de Bases de Dados



A modelação de dados é a actividade que, debruçando-se sobre a totalidade dos requisitos de
informação de um sistema de informação, tenta encontrar um modelo que traduza a estrutura lógica
dos dados que satisfaz esses requisitos. A esse modelo designa-se modelo conceptual de dados. Ex:
diagrama E-R (Entidade-Relacionamento), diagrama UML (Unified Modeling Language), etc.
O modelo conceptual de dados é depois traduzido num modelo de base de dados. Ex: hierárquico,
rede, relacional, orientado a objectos, etc.
Os modelos de bases de dados podem ser classificados em três gerações distintas:
o 1ª geração (modelos hierárquico e rede) - Corresponde aos primeiros passos da tecnologia de
bases de dados com o desenvolvimento dos modelos hierárquico e rede.
o 2ª geração (modelo relacional) - É caracterizada pelo desenvolvimento e divulgação do modelo
relacional.
o 3ª geração (novos modelos) - Corresponde ao estado actual de desenvolvimento da tecnologia
de bases de dados. Caracteriza-se pelo desenvolvimento, em paralelo, de alguns modelos ainda
não estabilizados.
• Dada a importância e o marco histórico que foi o modelo relacional, também é vulgar apresentar estas
três gerações como pré-relacional, relacional e pós-relacional.
1.2.1. 1ª Geração (Modelos Hierárquico e Rede)
•
•
Resultam de um processo evolutivo sobre as técnicas de processamento utilizadas nos sistemas de
gestão de ficheiros.
Apesar de existirem ainda muitos sistemas da 1ª geração em exploração e de haver grande quantidade
de dados armazenados segundo os seus modelos, trata-se de tecnologias em claro declínio.
o Modelo hierárquico
 Os dados encontram-se estruturados em hierarquias ou árvores. O acesso aos dados
faz-se percorrendo essas hierarquias, desde a raiz até ao nodo que contém o registo
pretendido.
o Modelo rede
 Basicamente, corresponde a uma extensão do modelo hierárquico. Eliminando o
conceito de hierarquia, permite que um mesmo tipo de registo esteja envolvido em
várias associações.
 Enquanto que no modelo hierárquico os registos estão organizados em conjuntos de
árvores, no modelo rede os registos estão organizados em grafos.
5
1.2.2. 2ª Geração (Modelo Relacional)
•
•
•
Contrariamente aos modelos hierárquicos e rede, o modelo relacional não evoluiu a partir das técnicas
de processamento sobre ficheiros.
Foi fruto de um desenvolvimento teórico, tendo a sua base num ramo da matemática que é,
simultaneamente, simples e poderosa – a teoria dos conjuntos.
Em 1970, Edgar Frank Codd, na altura investigador da IBM Corp., publicou um artigo com os
fundamentos teóricos do modelo relacional. (O modelo relacional vai ser apresentado
detalhadamente à frente)
1.2.3. 3ª Geração (Novos Modelos)
•
•
Áreas como o GIS (Geographic Information Systems), o CAD (Computer-Aided Design), o CIM (Computer
Integrated Manufacturing), as ferramentas CASE (Computer-Aided Software Engineering), os sistemas
multimédia, etc., com características muito diferentes das aplicações tradicionais de processamento de
dados de gestão, necessitam de facilidades que os sistemas convencionais de bases de dados não
suportam de forma adequada.
Actualmente, as três principais linhas de investigação e desenvolvimento das tecnologias de base de
dados desenrolam-se nas seguintes áreas:
o Extensões ao modelo relacional. Dado que o modelo relacional é um modelo estável, seguro e
com provas dadas, tentam aproveitar-se as suas virtudes (simplicidade de conceitos, linguagens
de manipulação de alto nível, bom suporte teórico, etc.), adicionando-lhe novas características.
Ou seja, a ideia é adicionar ao modelo relacional novas funcionalidades no sentido de
ultrapassar algumas das suas fraquezas.
o Modelo orientado a objectos. Esta linha de desenvolvimento surge na sequência dos
progressos ocorridos com as linguagens de programação orientadas a objectos. Trata-se de
uma abordagem nova, revolucionária e com grande potencial. Dispondo de grandes
capacidades de modelação, adequa-se aos requisitos das áreas de aplicação mais complexas.
o Modelo objecto-relacional. São bases de dados híbridas, tentando incluir numa mesma infraestrutura o melhor dos dois modelos (relacional e orientado a objectos). Trata-se,
normalmente, de bases de dados relacionais cujas funcionalidades são estendidas de maneira a
suportar armazenamento e processamento de objectos, que passam a ser tratados como se
fossem um tipo de dados da própria base de dados.
3.2 Concepção e Desenvolvimento de Bases de Dados
Etapas de Modelação de uma Base de Dados
6
2.1. Diagrama E-R
•
•
•
Foi proposto por Peter Chen em 1976.
Devido à sua notação simples e poderosa, depressa se tornou numa abordagem quase universal para a
modelação de dados. Curiosamente, ainda hoje não existe uma notação E-R normalizada,
predominando uma grande variedade de notações para representar os conceitos fundamentais de
modelação.
Como proposto originalmente, os elementos básicos de um diagrama E-R são as entidades, os
relacionamentos e os atributos. Posteriormente, outros conceitos foram sendo agregados à
abordagem, resultando no aparecimento de vários “dialetos” de diagramas E-R.
Entidades
•
Uma entidade representa um conjunto de objectos (concreto ou abstracto) do mundo real que
possuem características comuns.
Relacionamentos
•
Um relacionamento representa uma associação entre entidades.
Os relacionamentos também possuem ocorrências, que são associações entre ocorrências das entidades.
Cardinalidade de um Relacionamento
•
Cardinalidade máxima (1 ou N) – representa a quantidade máxima de ocorrências de uma entidade
que pode estar associada a uma mesma ocorrência de outra entidade. Em notações onde se assinale
um par de cardinalidades (x,y), a cardinalidade máxima é anotada no segundo elemento.
7
Quanto à cardinalidade máxima, os relacionamentos podem ser do tipo:
1:1 (um para um) 1:N (um para muitos) N:N (muitos para muitos)
Em notações onde se assinale a cardinalidade apenas com um elemento único, esse corresponde à
cardinalidade máxima.
•
Cardinalidade mínima (0 ou 1) – indica se a participação de todas as ocorrências de uma entidade em
um determinado relacionamento é obrigatória (1) ou opcional (0).
Em notações onde se assinale um par de cardinalidades (x,y), a cardinalidade mínima é anotada no
primeiro elemento. Nota: só se assinala a cardinalidade mínima em notações com par de cardinalidades.
Leitura genérica para determinar a cardinalidade
Grau de um Relacionamento
•
Embora a maioria dos relacionamentos ocorra entre duas entidades (relacionamento binário), podem
ser definidos relacionamentos entre qualquer número de entidades – relacionamento n-ário.
8
o
Relacionamento unário (ou auto-relacionamento)
o
Relacionamento ternário
Se, por exemplo, os alunos frequentam uma determinada disciplina em salas diferentes, vai ser necessário
um relacionamento ternário para guardar em que salas, é que os alunos frequentam essa disciplina.
Atributos
• A cada entidade (ou relacionamento) podem estar associados um ou mais atributos que representam
as suas propriedades elementares.
Todas as entidades devem possuir atributos. A ocorrência de relacionamentos com atributos é pequena,
aparecendo principalmente em relacionamentos N:N.
•
•
Um identificador é um atributo ou (menor) grupo de atributos que determina nivocamente uma
entidade.
Toda a entidade deve possuir um e apenas um identificador, podendo este ser simples ou composto.
9
Atributos multivalor não são permitidos em algumas notações, pois não existe representação
correspondente em SQL. Nestes casos, os atributos multivalor são representados pela criação de uma nova
entidade e de um novo relacionamento.
2.2. Modelo Relacional
Modelo Relacional Intro
•
•
•
•
Contrariamente aos modelos hierárquicos e rede, o modelo relacional não evoluiu a partir das técnicas
de processamento sobre ficheiros.
Foi fruto de um desenvolvimento teórico, tendo a sua base num ramo da matemática que é,
simultaneamente, simples e poderosa – a teoria dos conjuntos.
Em 1970, Edgar Frank Codd, na altura investigador da IBM Corp., publicou um artigo com os
fundamentos teóricos do modelo relacional.
Alguns SGBDs relacionais mais representativos: Oracle da Oracle Corp., MS SQL Server da Microsoft
Corp., DB2 da IBM Corp., Informix da IBM Corp., Adaptive Server Enterprise da Sybase Inc., MySQL
(Open Source) da MySQL AB Corp., MS Access da Microsoft Corp., etc.
Relação ou Tabela
•
•
•
A relação (ou tabela) é a estrutura fundamental do modelo relacional. Uma relação é uma estrutura
bidimensional com um determinado esquema e zero ou mais instâncias.
O esquema de uma relação é constituído por um ou mais atributos (também designados por colunas ou
campos). Cada atributo terá associado um tipo de dados de acordo com a informação que irá
armazenar.
A cada instância do esquema de uma relação designa-se tuplo (ou linha).
10
Tipos de Relações
•
No que concerne às relações ou tabelas, definem-se dois tipos:
o – Relações base que constituem o esquema da base de dados, onde estão realmente
armazenados os dados.
o – Relações virtuais (ou views) que não têm existência própria, pois derivam e estão associadas
às relações base com o objectivo de proporcionar “vistas” parciais sobre o esquema da base de
dados.
Tipos de Chaves
•
•
•
•
Superchave – associação de um ou mais atributos que, em conjunto, identificam univocamente cada
um dos tuplos. Nota: no limite, a associação de todos os atributos de uma relação constitui uma
superchave.
Chave candidata – subconjunto dos atributos de uma superchave que, sendo ainda superchave, não
pode ser reduzido sem perder essa qualidade.
Chave primária (ou chave principal) – chave seleccionada entre as várias chaves candidatas para,
efectivamente, identificar cada tuplo.
Chave estrangeira (ou chave importada) – atributo ou conjunto de atributos de uma relação, que é
chave primária noutra relação.
A existência de uma chave estrangeira numa relação prende-se com a necessidade de manter a
interligação entre essa relação e a relação onde esse conjunto de atributos é chave primária.
Restrições de Integridade Implícitas ao Modelo Relacional
•
•
•
Integridade de domínio. O valor de um atributo deve obedecer ao tipo de dados e às restrições de
valores que lhe estão admitidos.
Integridade da entidade. Cada tuplo de uma relação deve poder ser identificado univocamente. Isto
quer dizer que cada relação deverá possuir na sua definição uma chave primária. A existência de uma
chave primária garante que o atributo ou os atributos que a constituem não podem ser nulos, nem
podem ser repetidos.
Integridade referencial. O valor dos atributos que constituem a chave estrangeira de uma relação deve
estar também presente na chave primária da relação referenciada ou, quando muito, pode ser nulo.
11
2.3. Normalização
•
•
•
A normalização é um processo sistemático, definido por um conjunto de regras bem definidas, que visa
eliminar fontes de redundância nos dados.
Problemas associados à redundância de dados:
o Problemas de manutenção;
o Custos de espaço de armazenamento;
o Problemas de desempenho.
O processo de normalização ocorre através de um conjunto de fases que conduzem a base de dados a
estados onde a redundância se torna cada vez menor. A cada um destes estados dá-se o nome de
forma normal (FN).
•
Dependências funcionais – existe uma dependência funcional X ®Y entre dois conjuntos de atributos X
e Y, se uma instância de valores de X determina ou identifica univocamente uma instância de valores
dos atributos de Y.
•
Uma relação diz-se que está na Primeira Forma Normal (1FN) quando:
o
o
•
Uma relação diz-se que está na Segunda Forma Normal (2FN) quando:
o
o
•
Não contém atributos multivalor;
Não contém grupos repetitivos.
Está na Primeira Forma Normal (1FN);
Todos os atributos não chave dependem funcionalmente da totalidade da chave.
Uma relação diz-se que está na Terceira Forma Normal (3FN) quando:
o
o
Está na Segunda Forma Normal (2FN);
Todos os atributos não chave não dependem funcionalmente uns dos outros.
3. Linguagem SQL
3.1
•
•
Linguagens de Bases de Dados
A interacção do nível aplicacional, incluindo os utilizadores, com o SGBD faz-se à custa de linguagens
específicas.
Basicamente, podem-se identificar dois tipos de linguagens de bases de dados:
o – Linguagem de Definição de Dados (LDD) ou, em inglês, Data Definition Language (DDL) –
Esta não é uma linguagem no sentido vulgar dado às linguagens de programação, pois não
possui qualquer instrução específica de processamento. É antes uma notação utilizada para
descrever a estrutura dos dados a armazenar, ou seja, é a linguagem de definição dos
metadados.
o Linguagem de Manipulação de Dados (LMD) ou, em inglês, Data Manipulation Language
(DML) – Esta é a linguagem disponibilizada ao nível aplicacional para a manipulação dos dados
propriamente ditos. As operações possíveis são as vulgares: consulta, inserção, alteração e
remoção de dados. Em alguns sistemas, as instruções LMD podem ser executadas
interactivamente pelos utilizadores finais a partir do terminal (as chamadas questões ad hoc)
12
ou, então, embutidas numa linguagem de programação de alto-nível para o desenvolvimento
de aplicações.
3.2
Linguagem SQL
•
É uma linguagem normalizada pelo ANSI (American National Standards Institute) e pela ISO
(International Organization for Standardization).
o – SQL-86 (SQL-87) – Publicado pelo ANSI em 1986 e rectificado pela ISO em 1987.
o SQL-89 – Menor revisão.
o SQL-92 (SQL2) – Maior revisão.
o SQL:1999 (SQL3) – Adição de queries recursivas e triggers. Adição de tipos não-escalados e
algumas características de orientação a objectos (estas duas características são controversas e
ainda não são amplamente implementadas).
o SQL:2003 – Introduz características relacionadas com a XML e colunas com valores autogerados (incluindo colunas-identidade).
o SQL:2006 – Define mecanismos que permite usar a SQL em conjunto com a XML de uma forma
perfeitamente integrada.
•
A maior parte dos SGBD relacionais usam a linguagem SQL, mas possuem as suas próprias extensões à
SQL.
No entanto, tipicamente a linguagem pode ser migrada de plataforma para plataforma sem mudanças
•
estruturais principais.
•
A linguagem SQL é constituída por três sublinguagens:
o
o
o
3.3
Linguagem de Definição de Dados (LDD) [Data Definition Language (DDL) ]
Linguagem de Manipulação de Dados (LMD) [Data Manipulation Language (DML) ]
Linguagem de Controlo de Dados (LCD) [Data Controle Language (DCL) ]
SQL como Linguagem de Definição de Dados
Comandos CREATE DATABASE e DROP DATABASE
•
EXEMPLO
•
A SQL, enquanto Linguagem de Definição de Dados, disponibiliza um conjunto de comandos para a
criação (CREATE), alteração (ALTER) e remoção (DROP) de tabelas e outras estruturas.
Comando CREATE DATABASE – permite criar uma base de dados. Nota: não disponível no MS Access.
Comando DROP DATABASE – permite remover uma determinada base de dados, apagando todas as
tabelas e estruturas associadas e, consequentemente, todos os dados nelas existentes. Nota: não
disponível no MS Access.
EXEMPLO
•
CREATE DATABASE nome_da_base_de_dados
DROP DATABASE nome_da_base_de_dados
13
Comando CREATE TABLE
SINTAXE
Comando CREATE TABLE – permite criar uma tabela.
CREATE TABLE nome_tabela(
coluna1 tipo,
coluna2 tipo,
... ...,
colunan tipo).
EXEMPLO
•
CREATE TABLE Professor(
Id INTEGER,
Nome CHAR(50),
Data_Nasc DATE,
Salario FLOAT)
Tipos de Dados Básicos
Colunas – Valores por Defeito
• Na criação de uma tabela:
o Por defeito as colunas podem admitir valores nulos – NULL.
o É possível especificar se uma coluna pode admitir nulos ou não através das cláusulas NULL ou
NOT NULL.
o É possível associar um outro valor por defeito através da cláusula DEFAULT. Nota: não
disponível no MS Access.
14
EXEMPLO
CREATE TABLE Professor(
Id INTEGER NOT NULL,
Nome CHAR(50),
Data_Nasc DATE NULL,
Salario FLOAT DEFAULT 1000)
Restrições (em Inglês, Constraints)
•
•
•
•
•
Restrições (ou constraints) são regras a que os valores de uma ou mais colunas devem obedecer.
A utilização de restrições é a única garantia que temos de que os dados existentes nas colunas estão de
acordo com as regras especificadas no desenho da base de dados.
Restrição NOT NULL – é a restrição de uso mais generalizado, pois impede a introdução de valores
nulos na coluna.
Restrição CHECK() – permite realizar a validação dos dados introduzidos na coluna, através da
especificação de uma condição. São admitidos apenas os dados cujo resultado da avaliação da condição
seja verdadeiro. Nota: não disponível no MS Access.
o É possível a especificação da restrição CHECK() relativa a duas ou mais colunas.
Operadores a usar na restrição CHECK():
o Operadores relacionais: =, >, <, >=, <=, <> ou !=.
o Operadores lógicos: AND, OR, NOT.
o Outros operadores: BETWEEN, IN, IS, LIKE.
EXEMPLO
(Todos estes operadores serão vistos detalhadamente à frente no comando SELECT)
Restrição UNIQUE – permite indicar que os valores dessa coluna não se podem repetir.
EXEMPLO
•
CREATE TABLE Professor(
Id INTEGER NOT NULL,
Nome CHAR(50) NOT NULL CHECK(Nome NOT LIKE '%Rui%'),
Idade INTEGER NOT NULL CHECK(Idade BETWEEN 0 AND 150),
Sexo CHAR NOT NULL CHECK(Sexo IN ('M', 'F')),
Salario FLOAT NOT NULL CHECK(Salario >= 0),
Data_Nasc DATE NOT NULL,
Data_Admi DATE NOT NULL,
CHECK(Data_Admi > Data_Nasc))
CREATE TABLE Professor(
Id INTEGER,
Nome CHAR(50) UNIQUE,
Telefone CHAR(15),
BI INTEGER UNIQUE)
15
EXEMPLO
•
EXEMPLO
CREATE TABLE Professor(
Id INTEGER PRIMARY KEY,
Nome CHAR(50) UNIQUE,
Telefone CHAR(15),
BI INTEGER UNIQUE)
EXEMPLO
Restrição PRIMARY KEY – é utilizada para indicar qual a chave primária (se houver) da tabela.
CREATE TABLE Matriz(
Linha INTEGER,
Coluna INTEGER,
Valor FLOAT,
PRIMARY KEY(Linha,Coluna))
Restrição REFERENCES – é utilizada para indicar as chaves estrangeiras.
EXEMPLO
•
CREATE TABLE Professor(
Id INTEGER,
Nome CHAR(40),
Apelido CHAR(20),
Telefone CHAR(15),
BI INTEGER,
UNIQUE(Nome,Apelido),
UNIQUE(BI))
CREATE TABLE Professor(
Id INTEGER,
Nome CHAR(40) NOT NULL,
Apelido CHAR(20) NOT NULL,
BI NUMERIC NOT NULL UNIQUE,
Morada CHAR(80),
Cod_Postal NUMERIC(4) REFERENCES Postal(Codigo),
Salario NUMERIC(10,2) NOT NULL CHECK(Salario >= 0),
PRIMARY KEY(Id),
FOREIGN KEY(BI) REFERENCES Seg_Social(BId),
FOREIGN KEY(Nome,Apelido) REFERENCES Pessoa(Nome,Apelido))
16
Comandos ALTER TABLE e DROP TABLE
Comando ALTER TABLE – permite alterar a estrutura de uma tabela.
SINTAXE
•
ALTER TABLE nome_tabela ADD nome_coluna tipo_coluna
ALTER TABLE nome_tabela MODIFY nome_coluna tipo_coluna
ALTER TABLE nome_tabela DROP nome_coluna
EXEMPLO
Comando DROP TABLE – permite remover uma tabela. É removida toda a estrutura e o conjunto de valores
lá existentes.
3.4
DROP TABLE nome_tabela
SQL como Linguagem de Manipulação de Dados
Comando INSERT
•
A SQL, enquanto Linguagem de Manipulação de Dados, disponibiliza um conjunto de comandos que se
podem classificar em dois grupos:
o Actualização da base de dados (comandos INSERT, UPDATE e DELETE);
o Interrogação da base de dados (comando SELECT).
•
Comando INSERT – permite inserir novos registos numa tabela da base de dados.
SINTAXE
INSERT INTO nome_tabela(coluna1,...,colunan)
VALUES(valor1,...,valorn)
SINTAXE
INSERT INTO nome_tabela
VALUES(valor1,...,valorn)
EXEMPLO
A sintaxe pode tomar uma das seguintes formas:
INSERT INTO Professor(Id, Nome)
VALUES (1111, 'José Fernandes')
OU
Pode-se trocar o ordem das colunas, desde que se coloquem os valores associados na posição respectiva.
17
EXEMPLO
INSERT INTO Professor(Nome, Id)
VALUES ('José Fernandes', 1111)
Se pretendermos inserir valores em todas as colunas da tabela, poderemos utilizar o formato abreviado do
comando INSERT. A ordem a utilizar na disposição dos valores deve ser aquela pela qual as tabelas foram
criadas.
Nota: as colunas que não forem colocadas no comando INSERT (formato longo) são preenchidas com o
valor NULL.
EXEMPLO
MS ACCESS
EXEMPLO
SQL SERVER
INSERT INTO Professor(Id, Nome, Data_Nasc)
VALUES (2222, 'Silva', '13 Feb 1970')
INSERT INTO Professor(Id, Nome, Data_Nasc)
VALUES (2222, 'Silva', TO_DATE('13/02/1970', 'dd/mm/yyyy'))
INSERT INTO Professor(Id, Nome, Data_Nasc)
VALUES (2222, 'Silva', '1970-02-13')
EXEMPLO
EXEMPLO
INSERT INTO Professor(Id, Nome, Data_Nasc)
VALUES (2222, 'Silva', #02/13/1970#)
ORACLE
Manipulação de datas – o formato para a representação das datas é diferente de sistema para sistema.
mySQL
•
Comando UPDATE
Comando UPDATE – permite alterar os valores já existentes nos campos de uma única tabela.
SINTAXE
•
UPDATE nome_tabela
SET coluna1 = {expressão1,query1},
coluna2 = {expressão2,query2},
...,
colunan = {expressãon,queryn}
[WHERE condição]
18
EXEMPLO
UPDATE Professor
SET Salario = Salario * 1.1
EXEMPLO
A cláusula WHERE no comando UPDATE permite restringir o conjunto dos registos que irão ser processados
pelo comando. Se não for colocada a cláusula WHERE, as alterações serão realizadas a todos os registos da
tabela.
UPDATE Professor
SET Salario = Salario * 1.2,
Telefone = NULL
WHERE Categoria = 'Professor Catedrático'
Nota: com o comando UPDATE também se podem afectar os valores das colunas com o valor do resultado
de uma query (resultante de um SELECT).
Comando DELETE
Comando DELETE – permite apagar conjuntos de linhas existentes numa única tabela.
SINTAXE
•
DELETE FROM nome_tabela
[WHERE condição]
EXEMPLO
EXEMPLO
A cláusula WHERE no comando DELETE permite restringir o conjunto dos registos que irão ser apagados.
(apaga todas as linhas da tabela)
DELETE FROM Professor
(apaga apenas uma linha, uma vez que o Id é único – chave primária)
DELETE FROM Professor
WHERE Id = 1111
Nota: se na base de dados estiver definida integridade referencial entre as tabelas A e B, então só poderá
apagar uma linha na tabela A quando na tabela B não existirem referências a essa linha.
Comando SELECT
Comando SELECT – permite consultar uma base de dados relacional.
SINTAXE
•
SELECT coluna1,coluna2,...,colunan,*
FROM tabela1,...,tabelak
[WHERE condição]
[GROUP BY ...]
[HAVING ...]
[ORDER BY ...]
19
Comando SELECT (Selecções Simples)
Comando SELECT nas suas utilizações mais simples:
SINTAXE
•
Todos os exemplos do comando SELECT apresentados daqui para a frente vão ser baseados nas
seguintes tabelas:
BASE
•
SINTAXE
Seleccionando todos as linhas de uma tabela com todas as colunas:
SELECT Codigo, Designacao
FROM Curso
SELECT *
FROM Curso
Seleccionando apenas algumas colunas de uma tabela (operação denominada por Projecção):
SINTAXE
•
•
Aluno (Numero, Nome, Idade, Propina, Telefone, Cod_Curso)
Curso (Codigo, Designacao)
Disciplina (Cod_Disciplina, Nome_Disciplina)
Avaliacao (Numero, Cod_Disciplina, Nota)
SINTAXE
•
SELECT ...
FROM ...
[WHERE condição]
SELECT Numero, Nome, Cod_Curso
FROM Aluno
A cláusula WHERE permite restringir o conjunto de linhas a apresentar (operação denominada por
Selecção).
• Operadores a usar na cláusula WHERE:
o Operadores relacionais: =, >, <, >=, <=, <> ou !=.
o Operadores lógicos: AND, OR, NOT.
o Outros operadores: BETWEEN, IN, IS, LIKE.
20
EXEMPLO
SELECT *
FROM Aluno
WHERE Idade = 21
EXEMPLO
• Operadores relacionais: =, >, <, >=, <=, <> ou !=.
SELECT Numero, Nome, Propina
FROM Aluno
WHERE Idade >= 23
EXEMPLO
SELECT Numero, Nome, Idade
FROM Aluno
WHERE Idade >= 20 AND Idade <= 30
EXEMPLO
• Operadores lógicos: AND, OR, NOT.
SELECT Numero, Nome, Idade
FROM Aluno
WHERE NOT (Idade < 20 OR Idade > 30)
SINTAXE
SELECT ...
FROM ...
WHERE coluna [NOT] BETWEEN valor1 AND valor2
EXEMPLO
• Operador BETWEEN.
SELECT Numero, Nome, Idade
FROM Aluno
WHERE Idade BETWEEN 20 AND 30 (inclusive!!!)
21
SINTAXE
SELECT ...
FROM ...
WHERE coluna [NOT] IN (valor1,valor2,...,valorn)
EXEMPLO
SELECT Numero, Nome, Telefone
FROM Aluno
WHERE Propina IN (200, 300, 400)
EXEMPLO
• Operador IN.
SELECT Codigo, Designacao
FROM Curso
WHERE Designacao NOT IN ('Informática', 'Gestão')
• Operador IS (tratamento de valores nulos).
SINTAXE
As comparações de valores com NULL terão de ser realizadas utilizando o operador IS.
SELECT ...
FROM ...
WHERE coluna IS [NOT] NULL
Ex: SELECT Nome
FROM Aluno
WHERE Telefone IS NULL
• Operador LIKE (comparação de strings).
A comparação de strings com os operadores relacionais utiliza sempre a totalidade da string. Alternativa:
operador LIKE.
22
Comando SELECT (Ordenação)
A ordenação é baseada no valor do código ASCII de cada carácter.
A ordenação pode ser realizada através da cláusula ORDER BY no comando SELECT. Esta cláusula, se
existir, aparece sempre posicionada no final do comando SELECT.
SINTAXE
•
•
SELECT coluna1,coluna2,...,colunan,*
FROM tabela1,...,tabelak
[WHERE condição]
[GROUP BY ...]
[HAVING ...]
[ORDER BY coluna [ASC|DESC], coluna [ASC|DESC],
...]
23
Onde: coluna representa o nome de uma coluna, uma expressão ou a posição pela qual se pretende
ordenar o resultado do SELECT; ASC indica que a ordenação é ascendente; e DESC indica que a ordenação é
descendente.
•
Ordenação por uma coluna
Por defeito, a ordenação é ascendente.
A forma como o NULL é colocado no resultado ordenado de um SELECT depende de sistema para sistema.
•
Ordenação por várias colunas
EXEMPLO
SELECT *
FROM Aluno
ORDER BY Idade DESC, Propina
Ordenação por expressão
EXEMPLO
•
SELECT *
FROM Aluno
ORDER BY Idade, Propina
EXEMPLO
Caso se indique que se pretende ordenar o resultado de um SELECT por mais do que uma coluna, a
ordenação é feita pela primeira coluna, e entre valores iguais é ordenada pela segunda coluna, etc.
SELECT Idade, Propina AS Total, Propina*0.3 AS
Entrada,
Propina-Propina*0.3 AS Restante
FROM Aluno
WHERE Numero <= 1000
ORDER BY Idade, Propina*0.3
24
EXEMPLO
• Ordenação por posição
SELECT Idade, Propina AS Total, Propina*0.3 AS
Entrada,
Propina-Propina*0.3 AS Restante
FROM Aluno
WHERE Numero <= 1000
ORDER BY Idade, 3
A ordem das colunas é 1, 2, 3,… a contar da esquerda para a direita levada em conta a ordem pela qual as
colunas ou expressões foram colocadas na cláusula SELECT, nada tendo a ver com a ordem pela qual foram
criadas.
• Eliminação de repetições (SELECT DISTINCT e SELECT ALL)
EXEMPLO
A cláusula DISTINCT permite eliminar repetições de linhas no resultado de um SELECT. Os dados são
apresentados ordenadamente, uma vez que o motor da base de dados ao executar a pesquisa vai ordenar
as colunas seleccionadas, sendo depois mais fácil detectar e eliminar as repetições, pois, se existirem,
aparecem seguidas.
SELECT DISTINCT Nome_Disciplina
FROM Disciplina
EXEMPLO
A cláusula ALL está, por defeito, associada ao comando SELECT.
SELECT [ALL] Nome_Disciplina
FROM Disciplina
25
Download