Articles

Compreender as chaves primárias MySQL

As chaves primárias servem como identificadores únicos para os registos numa tabela, enquanto que as chaves estrangeiras são utilizadas para ligar tabelas relacionadas entre si. Ao conceber um conjunto de tabelas de base de dados, é importante especificar quais os campos que serão utilizados para chaves primárias e estrangeiras para clarificar tanto a estrutura da tabela como as relações entre tabelas.

Chaves primárias

É possível especificar uma chave primária para a tabela com a restrição de CHAVES PRIMÁRIAS. Num esquema de base de dados bem concebido, uma chave primária serve como um identificador único e inalterável para cada registo. Se uma chave for declarada como primária, isto geralmente implica que os valores nela contidos raramente serão modificados.

A restrição da CHAVE PRIMÁRIA pode ser melhor considerada como uma combinação das restrições NOT NULL e UNIQUE porque requer que os valores no campo especificado não sejam NULL nem repetidos em qualquer outra linha. Considere o exemplo seguinte, que demonstra ao definir o campo numericAirportID como a chave primária para a tabela de aeroportos.

mysql> CREATE TABLE airport ( -> AirportID smallint(5) unsigned NOT NULL, -> AirportCode char(3), -> AirportName varchar(255) NOT NULL, -> CityName varchar(255) NOT NULL, -> CountryCode char(2) NOT NULL, -> NumRunways INT(11) unsigned NOT NULL, -> NumTerminals tinyint(1) unsigned NOT NULL, -> PRIMARY KEY (AirportID) -> ) ENGINE=MYISAM;Query OK, 0 rows affected (0.05 sec)

Nesta situação, porque o campo AirportID é definido como a chave primária, o MySQL não permitirá a duplicação ou valores NULL nesse campo. Isto permite ao administrador da base de dados assegurar que cada aeroporto listado na tabela tem um valor numérico único, impondo assim um elevado grau de consistência nos dados armazenados.

PRIMARY KEY constraints podem ser especificados tanto para um único campo como para um composto de campos múltiplos. Considere o seguinte exemplo, que demonstra, ao construir uma tabela contendo uma chave primária composta:

mysql> CREATE TABLE flightdep ( -> FlightID SMALLINT(6) NOT NULL, -> DepDay TINYINT(4) NOT NULL, -> DepTime TIME NOT NULL, -> PRIMARY KEY (FlightID, DepDay, DepTime) -> ) ENGINE=MyISAM;Query OK, 0 rows affected (0.96 sec)

Neste caso, as regras da tabela permitem a repetição do número de voo, do dia de partida, ou da hora de partida, mas não de todos os três em conjunto. Veja o que acontece se tentar:

mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:01');Query OK, 1 row affected (0.20 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,2,'00:01');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:02');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO flightdep (FlightID, DepDay, DepTime) -> VALUES (511,1,'00:01');ERROR 1062 (23000): Duplicate entry '511-1-00:01:00' for key 'PRIMARY'

As chaves primárias compostas podem ser úteis quando um registo deve ser unicamente identificado por uma combinação dos seus atributos, e não apenas por um único atributo.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *