Você está na página 1de 27

Bases de Dados I

Aula 4 LECT, Aula 5 – EEI


11 e 13 de Março de 2003
Criação das tabelas numa base de
dados
 Definição das tabelas:
– De acordo com propriedades identificadas no modelo de
classes/ E-R e na conversão para relacional
– Criação de atributos (incluindo eventuais regras de
validação ou restrições que assegurem a integridade ao
nível do campo – restrições de domínio – ou ao nível do
registo – restrição ao nível da entidade (valor único))
– Criação de chave primária (restrições – exemplo de
restrição ao nível da entidade – cada registo tem de ser
único)
Criação das tabelas numa base de
dados
 Criação de índices
– Esta pode ser feita numa fase mais posterior, pelo
menos para alguns dos índices, uma vez que podem
depender das queries que vamos fazer à base de dados

 Criação das regras de integridade referencial


(restrições de integridade referencial):
– Através da definição de relações entre tabelas
OU
– Através da definição explícita de chaves estrangeiras
Criação das tabelas usando a
interface do Access
 Criação de uma tabela em Design View
– Definição do nome do atributo ou campo
– Definição do tipo de dados (eventualmente do tamanho)
– Definição de outras propriedades gerais:
 Index (duplicates ou non-duplicates)
 Default Value (valor assumido para o campo quando não for
especificado outro)
 Required: Yes or No (Presente em outros SGBD sobre outra forma)

– Definição de propriedades mais ou menos específicas do


Access
Propriedades específicas do Access
 Podem variar de tipo de dados para tipo de dados:
– Ex: Autonumber: New Values (Increment ou Random) –
específica deste tipo de campo
 Presentes em vários tipos de dados:
– Field Size (com valores diferentes para diferentes tipos de dados)
– Format (Formato de display – uso no Access)
– Input Mask (Máscara para entrada de dados – Access)
– Caption (Descrição dos controlos gerados automaticamente nos
forms e reports – Access)
– Validation rule (regra a usar para validar dados a inserir)
– Allow Zero Length (campos de texto – Access)
– (...)
 O tutorial tem informação mais detalhada sobre isto
Definição de índices
 A definição de índices, através da interface,
está limitada à definição de um índice por
campo e incluindo apenas esse campo
 Indexed: Yes ou No:
– (Duplicates Ok ou No Duplicates, se
definirmos o índice)
 Se pretendermos definir um índice
composto temos de usar SQL
Campos Candidatos a terem um
índice
 Campos que são chave estrangeira / surgem em
JOINs
 Campos que surgem em cláusulas WHERE em
queries de selecção
 Campos nos quais é baseada a ordenação

 Isto não significa que têm de ter índices, apenas


que devem ser considerados como hipóteses sérias
para essa possibilidade
Tabela Pessoa
Atributo Data Type Propriedades
IDPessoa AutoNumber Long Integer; Required:
Yes; Indexed: Yes (No
Duplicates)
Nome Text Field Size: 100;
Required: Yes;
Data Nascimento Date/Time Caption: ‘Data de
Nascimento’; Validation
Rule: <Now();
Validation Text: ‘A data
de nascimento tem de ser
anterior à data actual’
Integridade Referencial em Access, via
interface
 A integridade referencial no Access, através da
interface gráfica, é definida à custa da definição de
relações entre tabelas:
 Definição na Janela Relationships:
– Campos relacionados
– Grau da relação
– Enforce Referential Integrity
 Cascade Update Related Fields
 Cascade Delete Related Fields
 Tipo de Join:
– Inner, Left Outer, Right Outer
Exemplos
 Editora tem uma relação com obra:
– IDEditora, RefIDEditora
– grau 1:M
– Enforce Referential Integrity, Cascade Update Related Fields
– LEFT OUTER JOIN: Porquê
 Obra tem relação com Video:
– IDObra, RefIDObra
– Grau 1:1
– Enforce Referential Integrity,Cascade Update Related Fields
– LEFT OUTER JOIN
Que Tipo de Join usar na janela de
Relationships?
 Os joins a definir devem ser aqueles que
são mais prováveis nas queries que vamos
criar:
– O Access usa os joins definidos na janela de
relationships como os joins por defeito quando
se adicionam as tabelas às queries
– Esses joins podem, no entanto, ser alterados nas
queries, sem qualquer espécie de problema
Definição usando SQL
 Criação de tabelas:
– CREATE TABLE nome_tabela
(coluna1 tipo1 [(tamanho1)] [CONSTRAINT
restrição_coluna1]
[, coluna1 tipo2 [(tamanho2)] [CONSTRAINT
restrição_coluna2]
[,...]]
[CONSTRAINT restrição_tabela1][, CONSTRAINT
restrição_tabela2][,...]]]);
Tabela Pessoa usando SQL
 CREATE TABLE Pessoa
(IDPessoa COUNTER (1,1), Nome TEXT(100)
CONSTRAINT NomeC1 NOT NULL,
DataNascimento DATETIME CONSTRAINT DNC1 NOT
NULL ,
CONSTRAINT PrimaryKey PRIMARY KEY (IDPessoa) );

 Algumas das opções só estão disponíveis a partir da


interface, ou via código, não através da definição de
queries
Definição de restrições em SQL

 CONSTRAINT NAME {PRIMARY KEY


(column1[,column2[,...]]) | UNIQUE|
FOREIGN KEY (column1, column2 [,...]])
REFERENCES foreign-table [(fcolumn1,
fcolumn2[,...]])]}
Definição de chave estrangeira
para Obra
 ALTER TABLE Obra ADD
CONSTRAINT RefIDEditora FOREIGN
KEY(RefIDEditora) REFERENCES
Editora(IDEditora)
Definição de Chaves
Estrangeiras
 CONSTRAINT NAME FOREIGN KEY [NO
INDEX] (column1, column2 [,...]])
REFERENCES foreign-table [(fcolumn1,
fcolumn2[,...]])] [ON UPDATE {NO ACTION |
CASCADE}] [ON DELETE {NO ACTION |
CASCADE}]
 No caso de uma foreign key, também podemos
definir acções em caso de update e delete;
Disponível a partir de código e não da interface
gráfica
ALTER TABLE

 ALTER TABLE nome ADD [COLUMN]


nomecoluna tipo [(tamanho)] [CONSTRAINT
restrição_coluna];
 ALTER TABLE nome ADD CONSTRAINT
restrição;
 ALTER TABLE nome DROP [COLUMN]
nomecoluna;
 ALTER TABLE nome DROP CONSTRAINT
nome_restrição;
CREATE INDEX
 CREATE [UNIQUE] INDEX nome ON
TABLE (coluna1[,coluna2[,...]]) [WITH
{PRIMARY | DISALLOW NULL |
IGNORE NULL}];
DROP STATEMENT
 DROP TABLE nome;
 DROP INDEX ON nome ON nome;
Identificadores de tipos em SQL
SQL Access
BIT, BOOLEAN Yes/No
BYTE Number (Byte)
COUNTER AutoNumber
CURRENCY Currency
DATETIME Date/Time
SHORT Number (Integer)
LONG Number (Long Integer)
SINGLE Number (Single)
DOUBLE Number (Double)
TEXT Text
MEMO Memo
OLEOBJECT OLE Object
Exercício
 Especificar completamente cada uma das
tabelas para o modelo da biblioteca e
implementar as tabelas em Access
 Fazer o mesmo para o problema proposto
para guardar resultados do Campeonato de
Futebol.
Tabelas para exercício da biblioteca
 Pessoa (IDPessoa (Autonumber), Nome (Text (100))
– PK: IDPessoa
 Editora (IDEditora (Autonumber), Nome (Text(100))
– PK: IDPessoa
 Obra (IDObra (AutoNumber), Título (Text(100)),
Tipo (Text(1) – “L” or “A” or ”V”), RefIDEditora
(Number(Long Integer))
– PK: IDObra
– FK: RefIDObra
Tabelas para exercício da biblioteca
(2)
 Exemplar (IDExemplar (Autonumber),
DataAquisicao (Date/Time), Custo (Number
(Currency)), Cota (Text(15)), RefIDObra (Number
(Long Integer)))
– PK: IDExemplar
– FK: RefIdObra
 Video (RefIdObra (Number (Long Integer)),
Suporte (Text(1) – “C” or “D”, Duração (Number
(Integer)))
– PK, FK: RefIDObra
Tabelas para exercício da biblioteca (3)
 Audio (RefIdObra (Number (Long Integer)), Suporte
(Text(1) – “CD” or “CA”, Duração (Number
(Single)))
– PK, FK: RefIDObra
 Livro (RefIdObra (Number (AutoNumber)), ISBN
(Text(20)))
– PK, FK: RefIDObra
 Sócio ((IDSocio (AutoNumber), Numero
(Number(Integer)), Nome (Text(150)), Morada
(Text(255), CPostal(Text(8)), CPLocalidade
(Text(50))
– PK: IDSocio
Tabelas para exercício da biblioteca (4)

 Emprestimo (IDEmp (AutoNumber), DataInicio


(Date/Time), DataFim (Date/Time),
RefIDExemplar ( Number (Long Integer)),
RefIDSocio (Number (Long Integer))
– PK: IDEmp;
– FK: RefIdExemplar, RefIDSocio
 Realizador (RefIDPessoa (Number (Long
Integer)), RefIDObra (Number (Long Integer)))
– PK: (RefIDPessoa, RefIDObra)
– FK: RefIDPessoa, RefIDObra
Tabelas para exercício da biblioteca (5)

 Actor (RefIDPessoa (Number (Long Integer)),


RefIDObra (Number (Long Integer)),, Ordem
(Number(Byte)))
– PK: (RefIDPessoa, RefIDObra)
– FK: RefIDPessoa, RefIDObra
 Autor (RefIDPessoa (Number (Long Integer)),
RefIDObra (Number (Long Integer)),, Ordem
(Number(Byte)))
– PK (RefIDPessoa, RefIDObra)
– FK: RefIDPessoa, RefIDObra
Tabelas para exercício da biblioteca (6)

 Intérprete (RefIDPessoa (Number (Long


Integer)), RefIDObra (Number (Long
Integer)),, Ordem (Number(Byte)))
– PK: (RefIDPessoa, RefIDObra)
– FK: RefIDPessoa, RefIDObra

Você também pode gostar