为多个实体实现多个属性的最佳架构?

时间:2017-06-25 20:37:41

标签: laravel database-design

我正在设计一个调查系统数据库。系统中有多个实体,例如'调查''问题'选项''用户'' survey_instance&# 39;这些实体中的每一个都具有多个属性,例如调查具有“时间限制”,“如果问题应该随机呈现”。 (其他15个属性,并非所有调查都具有所有这些属性)。问题也会有多个可选属性。

我想知道在架构中实现这种业务情况的最佳方法是什么。

一个选项是,我为主表中的每个可能属性添加一列,例如在Survey表中添加17列,在问题表中添加7-8个奇数列。但是此选项将产生具有太多空值的多个列。看起来不是最好。

我认为第二个选项是添加一个额外的表来存储每个属性,并使用forein键作为主表ID。例如,一个名为' survey_attributes'的表格。使用survey_id作为外键和属性ID并赋值其他列。这将为分配给每个实体的每个属性生成一行。

第三个选项,我认为可能是我有一个表来定义属性,一个表来存储所有attribut-entiry组合的值。但我真的无法想到这一点。

有谁能帮助我了解这种情况下最好的数据库设计是什么?

我使用Laravel 5.4作为后端,使用VueJ作为前端。数据库设计必须易于创建和更新这些属性。

1 个答案:

答案 0 :(得分:0)

我打算给你第四个选择。使用要为特定实例设置的所有可选属性构建关联数组,序列化(serialize()json_encode())并将其保存到实体表的字段中。

如果你没有计划在mysql查询中使用你的可选属性(比如SELECT语句),这个解决方案已经足够了。 您还需要在想要更改特定属性时重新编码数组,因此我主要使用它,如果这些属性在大多数情况下都要读取并且修改是一种罕见的情况。 您甚至可以在您的Eloquent模型上设置accessors and mutator以简化您的工作。