Chave Primária e Chave Estrangeira em SQLite com Exemplos

Restrições SQLite

As restrições de coluna impõem restrições e regras aos valores inseridos em uma coluna para validar os dados inseridos. As restrições de colunas são definidas ao criar uma tabela, na definição da coluna.

Chave Primária SQLite

Todos os valores em uma coluna de chave primária devem ser únicos e não nulos

A chave primária pode ser aplicada a apenas uma coluna ou a uma combinação de colunas, neste último caso, a combinação dos valores das colunas deve ser única para todas as linhas da tabela.

Sintaxe:

Existem muitas maneiras diferentes de definir uma chave primária em uma tabela, como:

  • Na própria definição da coluna:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Como uma definição separada:
    PRIMARY KEY(ColumnName);
  • Para criar uma combinação de colunas como chave primária:
    PRIMARY KEY(ColumnName1, ColumnName2);

Restrição não nula

A restrição SQLite Not null impede que uma coluna tenha um valor nulo:

ColumnName INTEGER  NOT NULL;

Restrição DEFAULT

Restrição SQLite Default se você não inserir nenhum valor em uma coluna, o valor padrão será inserido.

Por exemplo:

ColumnName INTEGER DEFAULT 0;

Se você escrever uma instrução de inserção e não especificar nenhum valor para essa coluna, a coluna terá o valor 0.

Restrição SQLite UNIQUE

Restrição exclusiva do SQLite evitará valores duplicados entre todos os valores da coluna.

Por exemplo:

EmployeeId INTEGER NOT NULL UNIQUE;

Isto irá impor o "ID do Empregado" valor seja único, nenhum valor duplicado será permitido. Observe que isso se aplica aos valores da coluna "ID do Empregado" só.

Restrição SQLite CHECK

A verificação SQLite restringe uma condição para verificar um valor inserido; se o valor não corresponder à condição, ele não será inserido.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

Você não pode inserir um valor menor que 10 no "Quantidade" coluna.

Chave estrangeira SQLite

A chave estrangeira SQLite é uma restrição que verifica a existência de valor presente em uma tabela para outra tabela que tenha relação com a primeira tabela onde a chave estrangeira está definida.

Ao trabalhar com múltiplas tabelas, quando há duas tabelas relacionadas entre si com uma coluna em comum. E se você quiser garantir que o valor inserido em uma delas deve existir na coluna da outra tabela, então você deve usar uma “Restrição de chave estrangeira” na coluna em comum.

Neste caso, ao tentar inserir um valor naquela coluna, a chave estrangeira garantirá que o valor inserido existe na coluna da tabela.

Observe que as restrições de chaves estrangeiras não estão habilitadas por padrão em SQLite, você deve habilitá-los primeiro executando o seguintewing comando:

PRAGMA foreign_keys = ON;

Restrições de chave estrangeira foram introduzidas no SQLite a partir da versão 3.6.19.

Exemplo de chave estrangeira SQLite

Suponha que temos duas tabelas; Alunos e Departamentos.

A tabela Alunos contém uma lista de alunos e a tabela departamentos contém uma lista dos departamentos. Cada aluno pertence a um departamento; ou seja, cada aluno tem uma coluna DepartmentId.

Agora, veremos como a restrição de chave estrangeira pode ser útil para garantir que o valor do ID do departamento na tabela de alunos exista na tabela de departamentos.

Chave estrangeira SQLite

Portanto, se criamos uma restrição de chave estrangeira no DepartmentId da tabela Alunos, cada departamento inserido deverá estar presente na tabela Departamentos.

CREATE TABLE [Departments] (
	[DepartmentId] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
	[DepartmentName] NVARCHAR(50)  NULL
);
CREATE TABLE [Students] (
	[StudentId] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
	[StudentName] NVARCHAR(50)  NULL,
	[DepartmentId] INTEGER  NOT NULL,
	[DateOfBirth] DATE  NULL,
	FOREIGN KEY(DepartmentId) REFERENCES Departments(DepartmentId)
);

Para verificar como as restrições de chave estrangeira podem impedir que um elemento ou valor indefinido seja inserido em uma tabela que tenha relação com outra tabela, examinaremos o seguintewing exemplo.

Neste exemplo, a tabela Departamentos tem uma restrição de chave estrangeira para a tabela Alunos, portanto, qualquer valor departamentId inserido na tabela estudantes deve existir na tabela departamentos. Se você tentar inserir um valor DepartmentId que não existe na tabela de departamentos, a restrição de chave estrangeira impedirá que você faça isso.

Vamos inserir dois departamentos "ISTO" e “Artes” na tabela de departamentos conforme a seguirwing:

INSERT INTO Departments VALUES(1, 'IT');
INSERT INTO Departments VALUES(2, 'Arts');

As duas instruções devem inserir dois departamentos na tabela de departamentos. Você pode garantir que os dois valores foram inseridos executando a consulta “SELECIONE * DOS Departamentos” depois disso:

Chave estrangeira SQLite

Depois tente inserir um novo aluno com um DepartmentId que não existe na tabela de departamentos:

INSERT INTO Students(StudentName,DepartmentId) VALUES('John', 5);

A linha não será inserida e você receberá um erro dizendo que: A restrição FOREIGN KEY falhou.