В настоящее время я разрабатываю таблицы базы данных для приложения для управления клиентом и веб-сайтом. Мой вопрос касается использования первичных ключей в качестве функциональных частей таблицы (и не присваивания "идентификационных номеров" каждой таблице только потому, что).
Например, вот четыре связанные таблицы из базы данных, одна из которых использует традиционный номер первичного ключа, другие, которые используют уникальные имена в качестве первичного ключа:
--
-- website
--
CREATE TABLE IF NOT EXISTS `website` (
`name` varchar(126) NOT NULL,
`client_id` int(11) NOT NULL,
`date_created` timestamp NOT NULL default CURRENT_TIMESTAMP,
`notes` text NOT NULL,
`website_status` varchar(26) NOT NULL,
PRIMARY KEY (`name`),
KEY `client_id` (`client_id`),
KEY `website_status` (`website_status`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- website_status
--
CREATE TABLE IF NOT EXISTS `website_status` (
`name` varchar(26) NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `website_status` (`name`) VALUES
('demo'),
('disabled'),
('live'),
('purchased'),
('transfered');
--
-- client
--
CREATE TABLE IF NOT EXISTS `client` (
`id` int(11) NOT NULL auto_increment,
`date_created` timestamp NOT NULL default CURRENT_TIMESTAMP,
`client_status` varchar(26) NOT NULL,
`firstname` varchar(26) NOT NULL,
`lastname` varchar(46) NOT NULL,
`address` varchar(78) NOT NULL,
`city` varchar(56) NOT NULL,
`state` varchar(2) NOT NULL,
`zip` int(11) NOT NULL,
`country` varchar(3) NOT NULL,
`phone` text NOT NULL,
`email` varchar(78) NOT NULL,
`notes` text NOT NULL,
PRIMARY KEY (`id`),
KEY `client_status` (`client_status`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- client_status
---
CREATE TABLE IF NOT EXISTS `client_status` (
`name` varchar(26) NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `client_status` (`name`) VALUES
('affiliate'),
('customer'),
('demo'),
('disabled'),
('reseller');
Как вы можете видеть, 3 из 4 таблиц используют свое "имя" в качестве первичного ключа. Я знаю, что они всегда будут уникальными. В 2 случаях (таблицы * _status) я в основном использую динамическую замену для ENUM, поскольку параметры состояния могут измениться в будущем, а для таблицы "веб-сайт" я знаю, что "имя" веб-сайта всегда будет быть уникальным.
Мне интересно, если это звуковая логика, избавление от идентификатора таблицы, когда я знаю, что имя всегда будет уникальным идентификатором или рецептом для катастрофы? Я не опытный администратор базы данных, поэтому любая обратная связь, критика и т.д. Были бы чрезвычайно полезными.
Спасибо, что нашли время, чтобы прочитать это!