动态子属性

时间:2018-03-01 18:18:59

标签: ruby-on-rails json design-patterns database-design

所以我需要有一个架构,允许一个对象拥有多个子对象,并且这些子对象具有不同的动态属性。以此为例:

restaurants table
-----------------
id int primary_key unique not null
name varchar(50) not null

restaurants_equipment table
---------------------------
restaurant_id int
equipment_id int
??? JSON values of properties ???

equipment table
---------------
id int primary_key unique not null
name varchar(50) not null
??? JSON of available properties per equipment ???

在上面的表格中," ???"表明这是否是最佳方法。见下面的解释。

所以想象一下,如果你愿意并且为了简单起见,那里有2个餐厅记录和3个设备记录。表中的三个记录是"烤箱,微波炉和炉灶"。烤箱具有需要存储max_temperature(整数),racks_space(机架大小数组)的属性。 Microwave具有max_timer(整数),popcorn_setting(boolean)的属性。 Stove具有num_of_tops(整数),stove_type(整数)的属性。

正如您所看到的,每件设备都可以具有任何类型的动态属性,这些属性也需要与餐厅相关联,并具有该设备可能具有的价值。

所以,我的问题是在设备中每个记录具有动态属性的最佳方法是什么,并且这些值适当地存储在设备和特定餐厅之间的关系中并且能够处理用户输入的这些属性的约束(即存储约束信息等等?)?

1 个答案:

答案 0 :(得分:0)

您有两种选择:
选项#1: (适用于多种设备)
如果数据仅供查看,您可以在文本字段中以 JSON格式保存设备规格,并在后端(模型)或在前端(javascript或其他库),以显示ERB文件中的数据。

选项#2: (设备数量有限)
为每个 Equipment 规范创建表,并使用多态关联

http://guides.rubyonrails.org/association_basics.html#polymorphic-associations