MySQL:数百张桌子还是一张大桌子?

时间:2014-01-13 09:15:48

标签: mysql

我想创建一个网页,用户可以在其中整理收集的内容。当每个人都收集其他东西时我想让用户创建自己的datamodell(有严格的限制)。如果两个人收集相同的“东西”,他们可以共享数据结构。 我的想法是为每个集合提供一个ID,属于该集合的所有表都将ID作为前缀。

Table: Collections
ID | Collection
 1 | Poststamps
 2 | Barbie Dolls

Table: 1_Base
ID | StampValue | StampPic
....

Table: 2_Base
ID | EAN | Pic
....

因此,我会创建许多表,因为每个用户理论上可以创建自己的集合。我也可以只使用一个非常大的表和一个映射表。例如:

Table: Colleactions
ID | Collection
 1 | Poststamps
 2 | Barbie Dolls

Table: Mapping
fkCollection | FieldName    | Mapping
1            | DoubleField1 | StampValue
1            | BlobField1   | StampPic
2            | StringField1 | EAN
2            | BlobField1   | StampPic

Table: CollectionData
fkCollection | DoubleField1 | ... | DoubleField10 | StringField1 | ... | Stringfield10 | BlobField1 | ...
1            | 30           |     |               |              |     |               | ...        |
2            |              |     |               | 21312412414  |     |                | ...        |  

还有其他想法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

从我所看到的,你尝试这种方式的第二种方式将是最简单的方法...你的查询将更容易处理十倍,你不需要可编程地创建表格。所以我的建议是稍微修改你的第二个想法......只是为了澄清一些东西,一个blob会降低查询速度,所以我改变了块来保持源链接到图像。

表:Collections

ID| Collection
1 | Poststamps
2 | Barbie Dolls

表:CollectionData

fkCollection | DataType    | VALUE  | FieldName  |
1            | Double      | 30     | StampID    |
1            | String      | London | StampName  |
1            | ImgSrc      | ../loc | StampPic   |
2            | String      | Ken    | BarbieName |
2            | ImgSrc      | ../loc | BarbiePic  |