我想存储大约100k行数据,并且所有数据都存在一些常见字段。 所有数据都有一个类别,其他字段基于类别。
例如,如果数据属于类别1,则其为extrafield1
和extrafield2
我搜索并找到了两种存储数据的方法。
1-Name value pair
Table1
ID Name Category Field2 Field3
1 Name1 1 Value Value
2 Name2 2 Value Value
Table2
ID Table1_ID Name Value
1 1 extrafield1 1
2 1 extrafield2 2
3 1 extrafield3 3
4 2 extrafield4 4
5 2 extrafield5 5
2-Parent Child table
Table1
ID Name Category Field2 Field3
1 Name1 1 Value Value
2 Name2 2 Value Value
Tableforcategory1
ID Table1_ID extrafield1 extrafield2 extrafield3
1 1 1 2 3
Tableforcategory2
ID Table1_ID extrafield4 extrafield5
1 2 4 5
所以我的问题是当使用方法1 时和使用方法2 时。
答案 0 :(得分:1)
出于各种原因,方法2通常是优选的:
可能还有其他原因。
第一种方法 - 称为实体 - 属性 - 值建模(EAV) - 绝对是一种替代方法。它主要适用于两种情况:
有时这两种方法的混合是合适的,常用属性以关系格式存储,稀疏属性存储为EAV。
还有其他方法,例如将值存储在JSON或XML对象中。这些通常不推荐,但在某些情况下可能适用于某些数据库 - 特别是当所有属性需要被视为单个块并返回并设置在一起时。
答案 1 :(得分:0)
这取决于查询的类型和数据模型的稳定性。
如果您的查询基本上是静态的,这意味着您知道何时使用" extrafield_x",那么方法1更简单,更高效,但灵活性更低。
如果您需要更多动态查询,并且及时更多类别和更多" extrafields",方法1更灵活,不需要数据模型维护,但使用起来更复杂,可能更慢。