带列限制的数据库建模

uplii1fm  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(294)

我正在尝试使用mysql数据库对以下内容进行建模:
文件可以放入一个框中,也可以立即放入一个位置。
一个盒子可以有许多文件,然后会立即放置到一个位置。
位置可以有许多文件或框。
我最初的想法是在文件表上有两个外键,指向location和box,然后实现某种限制,防止两者都被填充,然而,我希望有一种更整洁的方法来实现这一点?

uklbhaso

uklbhaso1#

根据您的解释,您的数据库模型应该如下所示(uml表示法):

添加 Location_id 作为f.k to Box 并使外键约束不为null。
添加 Location_id 作为f.k to File 并使外键约束为null。
添加 Box_id 作为f.k to File 并使外键约束为null。
只检查其中一个 Location_id 以及 Box_idFile 可以填充时,应添加如下所示的检查约束。

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

但是,在mysql中,您应该通过触发器来控制这个约束(请看这里非常相似的示例-不完全相同,需要稍作修改)

相关问题