【发布时间】:2021-02-23 19:54:35
【问题描述】:
我的结构如下所示:
Attribute Values Table
+----+-----------+---------------+-------------+-------------+
| id | option_id | integer_value | price_value | text_value |
+----+-----------+---------------+-------------+-------------+
| 1 | 4 | NULL | NULL | NULL |
| 2 | NULL | 24 | NULL | NULL |
| 3 | NULL | NULL | NULL | Lorem Ipsum |
| 4 | NULL | NULL | 30.50 | NULL |
+----+-----------+---------------+-------------+-------------+
(为简洁起见,删除了一些列)
但基本上,条目的类型可以是对选择选项的引用 (option_id),也可以是整数值 (integer_value),也可以是十进制值 (price_value),也可以是文本值 (price_value)。 text_value)。省略的列之一是attribute_id,它对应于具有枚举的条目,该枚举存储这四列中的哪一列。
有没有办法在 Laravel 架构中添加一个约束,即这四列中至少有一个必须为非空?
【问题讨论】:
-
使用
required_without_all规则将其作为验证约束处理。 stackoverflow.com/questions/23401365/… -
顺便说一句,这违反了 1NF,它要求所有行/列交叉点都有一个值(或者至少一个适用于它们的值,即使您目前不知道它)。在您的情况下,您故意制作了一个只有 40% 不为空的表格
-
@apokryfos 谢谢,但有什么替代方案?只需将所有内容存储为字符串并根据类型枚举进行转换?例如,如果我想搜索某个范围内的所有整数值怎么办?另外,我无法对 option_id 列进行外键约束。
-
4 个表格是你如何规范化这个