我正在开发一个PHP web应用程序,处理有关某些公司的信息。到目前为止,DB设计如下所示:
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允许(所以你不能有一个“子公司”链接到一个集团或“直接”链接到一个公司),特别是。更新完成后(如果控股公司已经有子公司,则不能将其移动到子公司)。
你能给我一些想法吗?我一个人哪也不去:
发布于 2010-07-23 00:21:32
在MySQL中强制数据完整性是不可能的。MySQL静默地丢弃检查约束。触发器不可靠(例如,级联delete不调用before insert触发器)。即使它们是可靠的,MySQL触发器也不能实际阻止插入行。
您最大的希望是在MySQL之上增加一层来执行业务规则。
https://stackoverflow.com/questions/3310754
复制相似问题