• Nenhum resultado encontrado

Restrições de dados

No documento Banco de Dados - Rede e-TEC (páginas 55-61)

Aula 5 – SQL básico

5.4 Restrições de dados

As restrições em banco de dados são fundamentais para garantir a exatidão, a consistência e a integridade dos dados. A utilização das restri- ções ajuda a evitar danos acidentais no banco de dados.

Existem inúmeros tipos de restrição de integridade, desde uma sim- ples definição de tipo de variável, que irá determinar que a mesma só aceite aquele tipo de dado, uma definição de chave primária ou estrangeira, até restrições mais complexas, como gatilhos (triggers) e asserções (assertions). Neste caderno, iremos abordar as restrições de integridade garan- tidas pelo SGBD: restrições de vazio, de domínio, de chave e de integridade referencial. Todas essas restrições são efetuadas e gerenciadas pelo próprio SGBD, não necessitando da interferência humana. Todas elas são efetuadas pelo SGBD de forma transparente ao usuário, ou seja, são executadas auto- maticamente pelo sistema de banco de dados, sem que o usuário intervenha. Inicialmente, vamos falar das restrições de vazio. De acordo com

Elmasri e Navathe (2011), as restrições de vazio são conseguidas por meio da definição do tipo de atributo como NOT NULL. Quando definimos que um atributo é do tipo NOT NULL, estaremos criando uma restrição de vazio, ou seja, o atributo não aceitará que lhe seja atribuído valor vazio ou nulo.

Cabe ressaltar que a SQL possui ainda muitos outros recursos, porém, a proposta deste caderno era apresentar os principais e os mais comumente utilizados.

Veja o exemplo de aplicação

Considerando a tabela Aluno (matricula, nome, turma, nota), uti- lizada nos exemplos anteriores, vamos tentar executar a seguinte linha de comando SQL para inserir valores na tabela:

INSERT INTO Aluno VALUES (“”, “Joaquim da Silva”, “2B”, 75); A execução desta sequência SQL dará erro, pois o primeiro atributo (matrícula) é do tipo NOT NULL e, portanto, obrigatoriamente, deve receber algum valor; neste caso, foi atribuído vazio a ele.

Em MySql, o erro seria de um tipo assim:

MySQL Erro: Null value in column “matricula” violates not-null cons- traint

A segunda é a restrição de domínio. Ainda segundo Elmasri e Na-

vathe (2011), a restrição de domínio refere-se ao domínio de um atributo, ou seja, o conjunto de valores que esse atributo pode receber. Este tipo de restrição é talvez a mais elementar, pois é criada quando se define o tipo do atributo (inteiro, char, varchar, decimal etc.).

Veja o exemplo de aplicação

Na tabela Aluno (matricula, nome, turma, nota), referenciada ante- riormente, foi criado, por exemplo, o atributo matricula como sendo do tipo inteiro (ou int). Isto significa que foi criada uma restrição de domínio para o atributo matricula, assim, o mesmo só poderá aceitar caractere numérico e do tipo inteiro.

INSERT INTO Aluno VALUES (1AB9, “Joaquim da Silva”, “2B”, 75) A execução desta sequência irá gerar erro, pois tentou-se atribuir a matrícula um valor que não é numérico, afinal, possui letras junto aos números.

A terceira restrição é a de chave. Conforme o mesmo autor, a res- trição de chave determina que cada linha de uma tabela deve ser identifica- da por um valor único, ou seja, o(s) atributo(s)-chave(s) deve(m) ser único(s) na tabela.

Como exemplos de atributos-chave, vamos apresentar as chaves primária (simples ou composta) e estrangeira (explicada como integri- dade referencial). Vamos ilustrar um exemplo de declaração e definição de

cada um deles.

Veja o exemplo de restrição de chave primária simples

Considerando a tabela Aluno, referenciada anteriormente, vamos as- sumir que a mesma não tenha sido criada ainda e vamos simular a criação dela:

CREATE TABLE Aluno (matricula int not null,

turma char(2),

nota decimal(6,2),

primary key (matricula))

A definição da matrícula como primary key (chave primária), na última linha do comando Create Table, delimita uma restrição de chave, no caso de chave primária simples, pois se definiu apenas um atributo como

chave primária.

Para o caso de chave primária composta vamos usar o seguinte exemplo:

CREATE TABLE Aluno (matricula int not null,

nome varchar(40),

turma char(2) not null,

nota decimal(6,2),

primary key (matricula, turma))

A definição da matricula e da turma como chaves primárias deter- mina uma restrição de chave, neste caso, de chave primária composta, pois

se definiu dois atributos-chave.

Por fim, vamos apresentar a restrição de integridade referencial,

reconhecida como sendo talvez a mais importante restrição em banco de dados.

Elmasri e Navathe (2005) ressalta que a restrição de integridade referencial busca garantir que valores de atributos, que são “chave estran- geira” em uma relação R1, possuam valores correspondentes em chaves pri- márias da tabela referenciada R2.

Vamos trazer um exemplo para tornar isto mais claro?

Veja, então, o exemplo da criação/definição de uma restrição de integridade referencial.

Para este exemplo, vamos criar três novas tabelas: CREATE TABLE Médico (codMedico integer not null,

nome varchar(30) not null,

endereco varchar(35),

PRIMARY KEY (matricula) ) CREATE TABLE Consulta (codMed integer not null,

codPac integer not null, data date not null,

FOREIGN KEY codMed REFERENCES codMedico (Medico), FOREIGN KEY codPac REFERENCES

codPaciente (Paciente) ) CREATE TABLE Paciente (codPaciente integer not null,

endereco varchar(35),

fone varchar(14),

PRIMARY KEY (CodPaciente))

Uma vez criada a(s) chave(s) estrangeira(s) numa tabela, toda e qualquer manipulação de dados na(s) tabela(s) pai (onde está a chave primá- ria correspondente) irá repercutir na(s) tabela(s) filha(s). Portanto, no exem- plo anterior, quando se criaram as chaves estrangeiras com o Foreign Key na Tabela Consulta, foi determinada uma restrição de integridade referencial,

onde os dados da tabela Consulta fazem referência aos dados nas Tabelas Médico e Paciente.

Neste caso, como não foi especificada nenhuma ação na definição da chave estrangeira, o padrão é que não será aceito; por exemplo: a exclu- são de nenhum registro nas tabelas pai que possuírem o respectivo valor do atributo-chave nas tabelas filhas.

Resumo

Nesta aula, você aprendeu:

• os conceitos envolvidos em SQL;

• a importância da SQL para os sistemas e os bancos de dados relacionais e, consequentemente, para as empresas;

• os principais comandos SQL de DDL e de DML;

• a aplicação prática dos comandos SQL em um banco de dados. • a gerenciar os dados de banco de dados de forma automatizada,

organizada, com segurança, integridade e confiabilidade.

Atividades de aprendizagem

1. Para que serve a SQL?

2. Explique as siglas DDL e DML em banco de dados.

3. Para que servem os comandos Create Database, Create Table e Use, em SQL?

4. Informe a sequência do comando SQL para se criar a base de dados cha- mada “bdteste”. E também para se criar a tabela “tbteste”.

5. Qual comando SQL é utilizado para se mudar o nome da tabela “tbteste” para “TableTeste”? Demonstre.

6. Apresente a sequência de comando SQL para se criar uma tabela chama- da “Cliente” com os seguintes atributos e características:

• código: inteiro, como chave primária; • nome: varchar, de tamanho 50; • endereço: varchar, de tamanho 80; • sexo: char, de tamanho 1;

• fone: varchar, de tamanho 14; • datanasc: date.

7. Informe os comandos SQL para realizar a inserção dos seguintes dados na tabela “Cliente”:

• Registro 1: − Código = 2010

− Nome = João Pedro e Silva − Endereço = Av. Um, 100 − Sexo = M

− Fone = (38) 3221-0101 − DataNasc = 01/01/1980 • Registro 2:

− Código = 2011

− Nome = Maria Aparecida Linhares − Endereço = R. São José, 20 − Sexo = F

− Fone = (31) 3422-0202 − DataNasc = 10/12/1990

8. Qual a sequência de comando SQL para alterar o endereço do cliente de código = 2010 para “Rua Porto Alves, 45”, ao invés de “Av. Um, 100”. 9. Com base no esquema apresentado, informe a sequência SQL para resol-

ver as questões que se seguem: Esquemas

• Médico (CodMed, CRM, Nome, Especialidade, CPF, Endereco, CEP,

Cidade, Fone)

• Paciente (Codigo, Nome, Endereco, Cidade, Fone, CodMed)

a. Listar todos os médicos mostrando o nome, a especialidade e o telefone de cada um, ordenados pelo nome.

b. Listar todos os campos médico, ordenados por cidade.

c. Liste o total da folha de pagamento, ou seja, o somatório dos salários. d. Liste os nomes dos pacientes da cidade de Belo Horizonte que foram

atendidos pelo médico “Ivo Pitangui”.

AULA 1

Alfabetização Digital

Aula 6 – Integração de banco de dados e

No documento Banco de Dados - Rede e-TEC (páginas 55-61)

Documentos relacionados