跨多个一对多表强制约束

时间:2014-12-18 03:04:32

标签: mysql constraints

我有以下(高度简化的)数据库架构:

Simplified Database Schema

总结:

  • 帐户有一个用户(一对一)
  • 一个帐户有很多项目(一对多)
  • 项目有多个用户(一对多)

我担心的是用户属于项目,项目属于该帐户,但使用此模式无法保证属于某个帐户的用户也属于属于该帐户的帐户一个项目。

我的问题是:有没有办法使用MySQL添加约束来确保属于项目的用户也属于属于项目的帐户?

我正在使用MySQL 5.1.56。

2 个答案:

答案 0 :(得分:0)

  

无法保证属于某个帐户的用户也属于属于某个项目的帐户。

正确。但这不是MySQL的限制,它是您当前架构的限制。从我看到的,你已经创建了一个1-1用户关系>帐户,意味着用户只能属于此架构下的一个帐户。如果这种限制性关系的解决方案是在同一个表中有重复的用户,我担心你会有一个高度非规范化的模式,这将成为未来许多令人头疼的问题。

我强烈建议您在尝试制定约束之前首先关注业务实体的建模(至少遵循3NF)。首先,听起来您需要用户和帐户之间的多对多关系(为了容纳“属于某个帐户的用户,还需要属于另一个帐户”的要求)

答案 1 :(得分:0)

首先,感谢Garcia Hurtado提供的反馈和意见。当社区中的某个人花费时间和精力提供深思熟虑的回答时,我们非常感激。

我最终使用复合键来解决此问题。您可以使用以下SQL小提示程序查看架构:http://sqlfiddle.com/#!8/0612b

它不允许您使用INSERT语句对其进行测试,因此您只需下载并安装数据库模式即可尝试使用它。

最简单的测试示例是使用以下SQL语句:

INSERT INTO  project_users (user_id, account_id) VALUES (1, 2)

这会引发以下MySQL错误:

#1452 - Cannot add or update a child row: a foreign key constraint fails