PHP - 以最有效的方式存储多个属性

时间:2011-06-05 21:52:20

标签: php mysql

只是想知道是否有人能指出我在SQL中存储多个属性及其值的正确方向?

说我有名字,姓氏,公司,推特,脸书等等,可以在将来添加更多属性。

我想到了几种方法,一种是将所有答案存储在一列中,将所有答案存储在另一列中,通过爆破并存储它们,如Firstname ||| Surname ||| Company等... 或者,我对他们没有太多经验但是按位运算符?

如果有人能给我一个想法并且可能是一个很棒的例子,那么只是寻找最好/最有效的解决方案。

干杯, 基督教

3 个答案:

答案 0 :(得分:5)

如果您正在寻找的是一种将变量属性附加到给定用户的方法,并且您不希望每次都有新类型的属性修改该表。也许EAV会帮助你。如果你不习惯它,报告就有点复杂了。但它为您提供了非常灵活的结​​构。详细了解here

微小的例子:

    Users
    user_id username  paswword email
    1       "katsuke" "abc"    "demo@demo.com"

    User_EAV
    user_id attribute_name value
    1       "First Name"   "Katsuke"
    1       "Last Name"    "Isikashi"
    1       "Library Card" "14124214"
    1       "Dental Card"  "asd123123"

希望有所帮助。祝你好运!

答案 1 :(得分:3)

如果您只想存储和检索它们(不是批量更新,排序或按它们搜索),您可以使用普通表中的基本结构和序列化数组(或json)中的扩展值。 Doctrine支持这个(column: {additionalattrs: {type: object}}

实际上,如果你想搜索,json和serialize在纯文本中仍然可以搜索,但不要指望任何索引,并为一些误报做好准备。

答案 2 :(得分:2)

根据您的需要,您可以添加1:N属性表

id:     integer
name:   string
value:  string

您还可以考虑只添加非必填字段作为属性,并在主表中添加必填字段。这将允许您稍后添加更多字段。