Я разрабатываю веб-приложение на PHP, которое обрабатывает информацию об определенных компаниях. Пока что дизайн БД выглядит так:
CREATE TABLE `group` (
`group_id` int(10) unsigned NOT NULL auto_increment,
`group_name` varchar(50) NOT NULL,
PRIMARY KEY (`group_id`)
) ENGINE=InnoDB;
CREATE TABLE `company` (
`company_id` int(10) unsigned NOT NULL auto_increment,
`company_name` varchar(50) NOT NULL,
`group_id` int(10) unsigned default NULL,
PRIMARY KEY (`company_id`),
KEY `FK_company_group` (`group_id`),
CONSTRAINT `FK_company_group` FOREIGN KEY (`group_id`) REFERENCES `group` (`group_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
Дизайн слишком упрощен, и мне нужно изменить его, чтобы он мог содержать актуальную информацию о классификации компании. Подводя итог, можно сказать, что компания может находиться в одной (и только в одной) из четырех возможных ситуаций и при необходимости может быть связана с другим объектом (группой или другой компанией); тип и характеристики связанного объекта зависят от ситуации:
- Independent
/
/
- Holding /
/ \ --- Direct -> Group
/ \ /
/ \ /
\ - Dependent ----- Indirect -> Company of "Direct" type
\
\
- Subsidiary -> Company of "Holding" type
Таким образом, компания может быть «независимой», «прямой», «косвенной» или «дочерней». Стрелки представляют собой ссылки. (Извините, если названия не имеют большого смысла, я на лету перевожу с испанского.)
Я ищу дизайн БД для хранения этой информации и избежания несогласованности настолько, насколько позволяет InnoDB (поэтому у вас не может быть «дочерней компании», связанной с группой, или «прямой», связанной с компанией), особенно , после обновления (вы не сможете перевести холдинговую компанию в дочернюю, если у нее уже есть дочерние компании).
Можете ли вы дать мне несколько идей? Я никуда не ухожу: (