我在数据库和表格中有一个EAV结构:attribute(id,parent_id,code,name)
和value(id,entity_id,attribute_id,value)
。
我使用parent_id
存储属性列表。例如,
id | parent_id | code | name
1 | null | color_id | Color
2 | 1 | null | Red
3 | 1 | null | Blue
4 | 1 | null | Other
现在我需要能够在选择某个项目时存储不同的数据。这可以是一个或多个输入。例如:
Color:
(o) Red
(o) Blue
(o) Other (please specify) ______________
如何存放?创建附加表,或者可以使用指向所选元素或其他内容的parent_id进行存储?
id | parent_id | code | name
4 | 1 | null | Other
5 | 4 | other_one | First text value
6 | 4 | other_two | Second text value
答案 0 :(得分:0)
稍微考虑一下......这里试着回答一下“如何存储”的问题:
确保您在概念中得到部分结构。定义类型,值包,属于一起并使用XML的东西。像上面这样的东西可能像:
<settings>
<parent id="1">
<colors>
<color>Red</color> --here you should think of tags to set the meaning of the color...
<color>Red</color>
<color>Other</color> --here you set whatever color you want
</colors>
</parent>
<parent id="2">
-- Your example with the "First text value" gives me this idea:
<colors>
<color meaning="BackColor">Red</color>
<color meaning="BorderColor">Red</color>
<color meaning="First text value">Blue</color>
<color meaning="Second text value">Green</color>
</colors>
</parent>
</settings>
所以我的建议是:
尝试定义某些类型,如“FormColor”,并让它像
<FormColor backcolor="Red" forecolor="blue" first_text="green">
--You may add specialities within the FormColor-element
<SpecialColor meaning="SomeSpecialMeaning">Blue</SpecialColor>
</FormColor>
将这些“类型”放在父元素中。您可以通过id
轻松选择父元素并读取其内部XML。在那里你找到了你需要的一切......
使用这种方法,您可以像使用EAV一样灵活,但更易于阅读,更易于维护和评估。