我正在尝试使用mysql数据库对以下内容进行建模:文件可以放入一个框中,也可以立即放入一个位置。一个盒子可以有许多文件,然后会立即放置到一个位置。位置可以有许多文件或框。我最初的想法是在文件表上有两个外键,指向location和box,然后实现某种限制,防止两者都被填充,然而,我希望有一种更整洁的方法来实现这一点?
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_id 在 File 可以填充时,应添加如下所示的检查约束。
Location_id
Box
File
Box_id
CHECK (((Location_id IS NOT NULL) AND (Box_id IS NULL)) OR ((Location_id IS NULL) AND (Box_id IS NOT NULL)))
但是,在mysql中,您应该通过触发器来控制这个约束(请看这里非常相似的示例-不完全相同,需要稍作修改)
1条答案
按热度按时间uklbhaso1#
根据您的解释,您的数据库模型应该如下所示(uml表示法):
添加
Location_id
作为f.k toBox
并使外键约束不为null。添加
Location_id
作为f.k toFile
并使外键约束为null。添加
Box_id
作为f.k toFile
并使外键约束为null。只检查其中一个
Location_id
以及Box_id
在File
可以填充时,应添加如下所示的检查约束。但是,在mysql中,您应该通过触发器来控制这个约束(请看这里非常相似的示例-不完全相同,需要稍作修改)