Мои знания в области SQL ограничены, и я был бы признателен за помощь в разъяснении использования PRIMARY KEY
в следующих обстоятельствах. Я создал таблицу для поддержки информации о стране ISO. Я использую MariaDB 10, но считаю, что это не будет актуально для тех вопросов, которые у меня есть (?)
CREATE TABLE IF NOT EXISTS python.country
(
iso_code INTEGER( 3) NOT NULL ,
iso_2_alpha VARCHAR( 2) NOT NULL ,
iso_3_alpha VARCHAR( 3) NOT NULL ,
short_name VARCHAR( 32) NOT NULL ,
long_name VARCHAR( 64) NOT NULL ,
flag_link VARCHAR(2000) DEFAULT(NULL),
CONSTRAINT CK_iso_code CHECK (iso_code > 0 AND iso_code <= 999) ,
CONSTRAINT CK_iso_alpha CHECK (
iso_2_alpha RLIKE BINARY '^[A-Z]+$' AND LENGTH(iso_2_alpha) = 2
AND
iso_3_alpha RLIKE BINARY '^[A-Z]+$' AND LENGTH(iso_3_alpha) = 3
) ,
CONSTRAINT CK_names CHECK (
short_name RLIKE '^\\p{L}+(\\.?[[:blank:]]\\p{L}+)*\\p{L}+$'
AND
long_name RLIKE '^\\p{L}+(\\.?[[:blank:]]\\p{L}+)*\\p{L}+$'
) ,
CONSTRAINT UN_short_name UNIQUE (short_name) ,
CONSTRAINT UN_long_name UNIQUE (long_name) ,
CONSTRAINT UN_iso_2_alpha UNIQUE (iso_2_alpha) ,
CONSTRAINT UN_iso_3_alpha UNIQUE (iso_3_alpha)
-- ???
-- CONSTRAINT PK_country PRIMARY KEY (iso_code,iso_2_alpha,iso_3_alpha)
); -- ENGINE = 'InnoDB';
Вопрос 1: Поскольку все основные столбцы (iso_code
, iso_2_alpha
, iso_3_alpha
) имеют значения NOT NULL
и UNIQUE
, имеет ли смысл создавать составной PRIMARY KEY
? Я "верю", что это пустая трата пространства и времени при вставке новых элементов?
Вопрос 2: Можно ли безопасно использовать iso_code
, если в другой таблице указан FOREIGN KEY
?
Большое спасибо.