Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Relações são as associações estabelecidas entre duas ou mais tabelas. As relações são baseadas em campos comuns de mais de uma tabela, envolvendo muitas vezes chaves primárias e estrangeiras.
Uma chave primária é o campo (ou campos) usado para identificar exclusivamente cada registro em uma tabela. Há três requisitos para uma chave primária: não pode ser nula, ele deve ser exclusiva e haver apenas uma definida por tabela. Você pode definir uma chave primária, quer através da criação de um índice de chaves primárias depois que a tabela for criada, ou usando a cláusula CONSTRAINT na declaração de tabela, como mostrado nos exemplos posteriormente nesta seção. As restrições limitam os valores que são inseridos em um campo.
Uma chave estrangeira é um campo (ou campos) em uma tabela que faz referência à chave primária em outra tabela. Os dados nos campos das duas tabelas são exatamente iguais e a tabela com o registro da chave primária (tabela primária) deve ter registros existentes, antes que a tabela com o registro de chave estrangeira (a tabela externa) tenha os registros correspondentes ou relacionados. Assim como as chaves primárias, você pode definir chaves estrangeiras na declaração da tabela usando a cláusula CONSTRAINT.
Há essencialmente três tipos de relações:
- um-para-um Para cada registro na tabela primária, há apenas um registro na tabela estrangeira.
- Um-para-muitos Para cada registro na tabela primária, há um ou mais registros relacionados na tabela estrangeira.
- Muitos para muitos Para cada registro na tabela primária há vários registros relacionados na tabela estrangeira e para cada registro na tabela estrangeira há vários registros relacionados na tabela primária.
Por exemplo, digamos que você deseja adicionar uma tabela de notas fiscais em um banco de dados de notas fiscais. Cada cliente na tabela de clientes pode ter várias notas fiscais na tabela de notas fiscais (este é um cenário clássico de um-para-muitos). Você pode tirar a chave primária da tabela de clientes e defini-la como a chave estrangeira na tabela de notas fiscais, estabelecendo, desse modo, a relação apropriada entre as tabelas.
ao definir as relações entre as tabelas, você deve fazer as declarações CONSTRAINT em nível de campo. Isso significa que as restrições são definidas dentro de uma instrução CREATE TABLE. Para aplicar as restrições, use a palavra-chave CONSTRAINT após a declaração do campo, nomeie a restrição, nomeie a tabela à qual ela faz referência e nomeie o campo ou campos dentro da tabela que vai constituir a chave estrangeira correspondente.
A instrução a seguir supõe que a tabela tblCustomers já foi criada e que uma chave primária foi definida no campo CustomerID. A instrução agora cria a tabela tblInvoices, definindo a respectiva chave primária no campo InvoiceID. Ela também cria a relação um-para-muitos entre as tabelas tblCustomers e tblInvoices, através da definição de um outro campo CustomerID na tabela tblInvoices. Este campo é definido como uma chave estrangeira, que faz referência ao campo CustomerID na tabela de clientes. Observe que o nome de cada restrição segue a palavra-chave CONSTRAINT.
CREATE TABLE tblInvoices
(InvoiceID INTEGER CONSTRAINT PK_InvoiceID PRIMARY KEY,
CustomerID INTEGER NOT NULL CONSTRAINT FK_CustomerID
REFERENCES tblCustomers (CustomerID),
InvoiceDate DATETIME,
Amount CURRENCY)
Observe que o índice de Chave Primária (PK_InvoiceID) para a tabela de notas fiscais é declarado na instrução CREATE TABLE. Um índice é criado automaticamente para melhorar o desempenho da chave primária, por isso não é necessário usar uma instrução CREATE INDEX separada. Agora crie uma tabela de envio que contenha o endereço de envio de cada cliente. Suponha que haverá apenas um registro de envio para cada registro de cliente, portanto, você estabelecerá uma relação um para um.
CREATE TABLE tblShipping
(CustomerID INTEGER CONSTRAINT PK_CustomerID PRIMARY KEY
REFERENCES tblCustomers (CustomerID),
Address TEXT(50),
City TEXT(50),
State TEXT(2),
Zip TEXT(10))
Observe que um campo CustomerID field serve tanto como a chave primária da tabela de remessas como a referência de chave estrangeira para a tabela de clientes.
Restrições
As restrições podem ser usadas para estabelecer chaves primárias e integridade referencial, e para restringir os valores que podem ser inseridos em um campo. De modo geral, as restrições são usadas para manter a integridade e a consistência dos dados no banco de dados.
Há dois tipos de restrições: a restrição de campo único ou no nível do campo e a restrição de vários campos ou no nível da tabela. Ambos os tipos de restrições podem ser usados na instrução CREATE TABLE ou ALTER TABLE .
A restrição de um único campo, também conhecida como restrição no nível do campo, é declarada com o campo em si, depois que o campo e os tipos de dados forem declarados. Use a tabela de clientes e crie uma chave primária de um único campo, no campo CustomerID. Para adicionar a restrição, use a palavra-chave CONSTRAINT com o nome do campo.
ALTER TABLE tblCustomers
ALTER COLUMN CustomerID INTEGER
CONSTRAINT PK_tblCustomers PRIMARY KEY
Observe que o nome da restrição é determinado. Você pode usar um atalho para declarar a chave primária que omite totalmente a cláusula CONSTRAINT.
ALTER TABLE tblCustomers
ALTER COLUMN CustomerID INTEGER PRIMARY KEY
No entanto, o uso do método de atalho faz com que o Access gere um nome para a restrição de forma aleatória, o que dificulta fazer a referência no código. É uma boa ideia sempre nomear suas restrições.
Para eliminar uma restrição, use a cláusula DROP CONSTRAINT com a instrução ALTER TABLE e forneça um nome para a restrição.
ALTER TABLE tblCustomers
DROP CONSTRAINT PK_tblCustomers
As restrições podem ser usadas também para restringir os valores permitidos para um campo. Você pode restringir os valores para NOT NULL ou UNIQUE ou definir uma restrição CHECK, que é um tipo de regra comercial, que pode ser aplicada a um campo. Digamos que você deseja restringir os valores dos campos Nome e Sobrenome para que seja um valor único, o que significa que nunca deve haver uma combinação de nome e sobrenome, que sejam iguais em dois registros na tabela. Como se trata de uma restrição de vários campos, ela é declarada no nível da tabela, e não no nível do campo. Use a cláusula ADD CONSTRAINT e defina uma lista de vários campos.
ALTER TABLE tblCustomers
ADD CONSTRAINT CustomerID UNIQUE
([Last Name], [First Name])
A restrição CHECK é um recurso avançado do SQL, que permite adicionar uma validação de dados em uma tabela, criando uma expressão que faz referência a um único campo ou a vários campos, em uma ou mais tabelas. Digamos que você deseja verificar se os valores inseridos em um registro de nota fiscal são sempre superiores a R$ 0,00. Para fazê-lo, use uma restrição CHECK, declarando a palavra-chave CHECK e a expressão de validação na cláusula ADD CONSTRAINT de uma instrução ALTER TABLE.
ALTER TABLE tblInvoices
ADD CONSTRAINT CheckAmount
CHECK (Amount > 0)
A expressão usada para definir uma restrição de verificação também pode se referir a mais de um campo na mesma tabela ou a campos em outras tabelas e pode usar todas as operações válidas no Access SQL, como instruções SELECT , operadores matemáticos e funções de agregação. A expressão que define a restrição de verificação não pode ter mais de 64 caracteres.
Digamos que você deseja verificar o limite de crédito dos clientes, antes de adicioná-los à respectiva tabela. Crie uma restrição usando a instrução ALTER TABLE com as cláusulas ADD COLUMN e CONSTRAINT, que vai buscar o valor na tabela CreditLimit para verificar o limite de crédito dos clientes. Use as seguintes instruções do SQL para criar a tabela tblCreditLimit, adicionar o campo CustomerLimit à tabela tblCustomers, adicionar a restrição CHECK à tabela tblCustomers e testar a restrição CHECK.
CREATE TABLE tblCreditLimit (
Limit DOUBLE)
INSERT INTO tblCreditLimit
VALUES (100)
ALTER TABLE tblCustomers
ADD COLUMN CustomerLimit DOUBLE
ALTER TABLE tblCustomers
ADD CONSTRAINT LimitRule
CHECK (CustomerLimit <= (SELECT Limit
FROM tblCreditLimit))
UPDATE TABLE tblCustomers
SET CustomerLimit = 200
WHERE CustomerID = 1
Observe que ao executar a instrução UPDATE TABLE , você recebe uma mensagem indicando que a atualização não foi bem-sucedida porque ela violou a restrição de verificação. Quando você atualiza o campo CustomerLimit para um valor igual ou inferior a 100, a atualização é bem-sucedida.
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.