首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持复杂属性的数据库设计

问支持复杂属性的数据库设计
EN

Stack Overflow用户
提问于 2010-07-22 23:49:56
回答 1查看 151关注 0票数 0

我正在开发一个PHP web应用程序,处理有关某些公司的信息。到目前为止,DB设计如下所示:

代码语言:javascript
复制
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;

这个设计太简单了,我需要修改它,这样它才能包含有关公司分类的实际信息。总而言之,一家公司可以处于四种可能情况中的一种(且只有一种),并且可以选择性地链接到另一对象(集团或另一家公司);链接对象的类型和特征取决于情况:

代码语言:javascript
复制
                -  Independent           
               /             
              /               
   - Holding /                    
  /          \                 --- Direct -> Group
 /            \               /               
/              \             /               
\               -  Dependent ----- Indirect -> Company of "Direct" type                     
 \                                     
  \                                    
   - Subsidiary -> Company of "Holding" type                                  

因此,公司可以是“独立的”、“直接的”、“间接的”或“附属的”。箭头表示链接。(抱歉,如果这些名称没有什么意义,我正在从西班牙语即时翻译。)

我正在寻找一个数据库设计,以容纳这些信息,并避免不连贯尽可能多的InnoDB允许(所以你不能有一个“子公司”链接到一个集团或“直接”链接到一个公司),特别是。更新完成后(如果控股公司已经有子公司,则不能将其移动到子公司)。

你能给我一些想法吗?我一个人哪也不去:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-23 00:21:32

在MySQL中强制数据完整性是不可能的。MySQL静默地丢弃检查约束。触发器不可靠(例如,级联delete不调用before insert触发器)。即使它们是可靠的,MySQL触发器也不能实际阻止插入行。

您最大的希望是在MySQL之上增加一层来执行业务规则。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3310754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档