Este documento resume as etapas para criação de tabelas em uma base de dados: 1) Definição das tabelas com atributos, tipos de dados e restrições; 2) Criação de índices; 3) Definição de regras de integridade referencial através de relações entre tabelas. Também fornece exemplos de como criar tabelas usando a interface do Access ou SQL.
Este documento resume as etapas para criação de tabelas em uma base de dados: 1) Definição das tabelas com atributos, tipos de dados e restrições; 2) Criação de índices; 3) Definição de regras de integridade referencial através de relações entre tabelas. Também fornece exemplos de como criar tabelas usando a interface do Access ou SQL.
Este documento resume as etapas para criação de tabelas em uma base de dados: 1) Definição das tabelas com atributos, tipos de dados e restrições; 2) Criação de índices; 3) Definição de regras de integridade referencial através de relações entre tabelas. Também fornece exemplos de como criar tabelas usando a interface do Access ou SQL.
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)