使用列限制对数据库建模

时间:2018-01-09 15:00:16

标签: mysql sql database database-design

我正在尝试使用MySQL数据库建模以下内容:

文件可以进入 Box ,也可以立即进入位置

Box 可以包含多个文件,然后会立即放入位置

地点可以包含多个文件

我最初的想法是在文件表上有两个外键到位置 Box ,然后实现某种约束但是,我希望有一种更简洁的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

根据您的解释,您的数据库模型应如下所示(UML-Notation):

enter image description here

  1. Location_id作为F.K添加到Box并使外键约束为非空。
  2. Location_id作为F.K添加到File并创建一个可以为空的外键约束。
  3. Box_id作为F.K添加到File并创建一个可以为空的外键约束。
  4. 要检查Location_idBox_idFile中只有 ,您应该添加检查约束,下面。

    CHECK (((Location_id IS NOT NULL) AND (Box_id IS NULL)) OR ((Location_id IS NULL) AND (Box_id IS NOT NULL)))
    

    但是,在MySQL中,你应该通过触发器控制这个约束。 (参见非常相似的例子here - 不完全相同,需要稍加修改)