2014-01-13 110 views
0

我想创建一个网页,用户可以组织他们收集的东西。随着每个人都收集其他东西,我希望用户创建自己的数据模型(具有严格的限制)。如果两个人收集相同的“事物”,他们可以共享一个数据结构。 我的想法是给每个集合一个ID,并且属于该集合的所有表都将ID作为前缀。MySQL:数百张桌子或一张大桌子?

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 |  |    | ...  | 

还有其他想法吗?

感谢您的帮助!

+0

你有没有尝试创建'VIEW'?或者使用'UNION'? –

+0

据我所知,工会不在MySQL的工作...纠正我,如果我错了请...不知道虽然 –

+0

视图嗨!我还没有测试过任何东西。我正在计划这个项目。据我所知UNION不起作用。如果解决方案2是一张大桌子,VIEW将有所帮助。正确? – AlexWerz

回答

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 | 
+0

谢谢!这是一个绝妙的主意。我现在可以规范化表格,并有一个fkDataType和一个fkFieldName。再次感谢! – AlexWerz

+0

永远的快乐:) –