我正在尝试使用MySQL数据库建模以下内容:
文件可以进入 Box ,也可以立即进入位置。
Box 可以包含多个文件,然后会立即放入位置。
地点可以包含多个文件或框。
我最初的想法是在文件表上有两个外键到位置和 Box ,然后实现某种约束但是,我希望有一种更简洁的方法可以做到这一点吗?
答案 0 :(得分:0)
根据您的解释,您的数据库模型应如下所示(UML-Notation):
Location_id
作为F.K添加到Box
并使外键约束为非空。Location_id
作为F.K添加到File
并创建一个可以为空的外键约束。Box_id
作为F.K添加到File
并创建一个可以为空的外键约束。要检查Location_id
中Box_id
和File
中只有 ,您应该添加检查约束,下面。
CHECK (((Location_id IS NOT NULL) AND (Box_id IS NULL)) OR ((Location_id IS NULL) AND (Box_id IS NOT NULL)))
但是,在MySQL中,你应该通过触发器控制这个约束。 (参见非常相似的例子here - 不完全相同,需要稍加修改)