1

我认为我的问题可能不清楚,但我会尝试通过示例来解释它。

假设我们有大约 100 种不同的汽车型号,显然所有汽车都将共享共同的零件或规格,但并非所有零件都在所有这 100 个汽车品牌之间共享

在这种情况下存储这些规范的最佳做法是什么?

我的想法是在每一列中存储最常见的规范,并且可以将未确定的(其余)规范保存或序列化为对象或数组。

学说通过这些数据类型(数组对象)简化了这个操作你认为这是个好主意还是可以和我分享你的经验

这是我在 2 个简单表格中的想法

Table 1
|-------|--------|-------|-------|-------|
| Id    | brand  |engine |desiel | blah..|
|-------|--------|-------|-------|-------|
| 1     | old car|   1.6 | yes   | blah..|
|-------|--------|-------|-------|-------|


Table 2 
|-------|--------|----------------------|
| Id    | car_id |  un common info      |
|-------|--------|----------------------|
| 1     |    1   |array of informations |
|-------|--------|----------------------|

我认为我的想法很糟糕,因为它破坏了搜索能力

4

5 回答 5

2

如果你必须坚持使用 MySQL,那么正如 Paul 和 Netcoder 所说,EAV 将是选择的解决方案。

除非仔细管理,否则 EAV 确实存在可伸缩性问题,并且您的用例听起来最好由 NoSQL(非关系数据库)解决方案(例如 Couch 或 Mongo)解决。

诸如此类的面向文档的数据库是围绕实体没有固定数量字段的逻辑构建的,例如,产品和有关其所有图像的数据将驻留在一个“文档”中。

于 2010-10-31T21:29:26.753 回答
1

可能希望您需要一个实体-属性-值(EAV) 架构。这些可以让您拥有包含不同数量信息的记录,但查询起来可能很棘手。

于 2010-10-31T21:22:26.517 回答
0

一个常用的解决方案是有一个接受键值对的表(通常称为 EAV):

|-------|--------|-------|
| carId | name   | value |
|-------|--------|-------|
| 1     | engine | 4cyl  |
|-------|--------|-------|
于 2010-10-31T21:26:07.833 回答
0

强制列的数量和类型肯定是不可能的吗?即使你允许一些模糊的?如果您可以确定列,则不需要复杂的解决方案。可能是最不痛苦的选择。只是一个想法。

于 2010-10-31T22:10:04.457 回答
0

为每个唯一的属性组合使用一个表,但也将公共属性放入具有这些共同属性的所有汽车类型之间共享的表中。这个想法是确保描述汽车的每个可能的元组只能出现在模式中的一个位置。这个原理有一个名字:正交设计原理

于 2010-10-31T23:17:22.960 回答