2012-08-03 41 views
1

我的问题涉及到一个带有mysql数据库的php网站。如何在数据库中创建动态“类型”

目前在数据库中,我们有一个“令牌”实体

令牌可保持0或多个“对象”实体和每个对象的类型可以是X,Y,Z的

所以

---------- 
| Token | 
|--------| 

-------------- 
|token_object| 
|   | 
|tokenID  | 
|objectID | 
-------------- 

------------ 
| object | 
|   | 
|objectType| 
------------ 

------------ --------- --------- 
| objectX | |objectY| |objectZ| 
|   | |  | |  | 
------------ --------- --------- 

现在这个工程okish,因为当我想从一个物体,由于我们的缓存系统的性质,是在当时几乎总是一个对象,我可以只让两个查询来从数据的数据物体和物体X/Y/Z

(SELECT * FROM object WHERE id = $id) 

switch($objectType) 
case 'objectX': 
    SELECT * from ObjectX WHERE id = $id 
case 'objectY': 
etc etc.. 

但现在我一直在问,让网站的用户创建新的对象类型,即对象A/B等

我可以创建一个新的objectXn表为每个新的对象类型,并通过选择一个很好的值的objectType将工作

(SELECT * FROM $objectType WHERE blabla) 

但这似乎并不是一个很干净的解决方案n,尤其是创建新表格

有没有更好的解决方案?

值得注意的是,我希望有相对令牌和额外的对象类型的创建将不会发生大量的/几乎不会有大量的对象

+1

我正在从此删除PHP标记。虽然你在PHP中实现你的解决方案,但问题的核心是参考MySQL,因此PHP不属于。 – Matt 2012-08-03 17:18:08

+0

对象表是否都有相同的字段?呃等等,不,我认为我看到 - 对象具有所有对象通用的字段,而objectX具有X唯一的字段? – 2012-08-03 17:32:43

回答

1

你到底是什么存储?它是否需要对它进行复杂的查询,或者是否需要通过id进行简单的对象存储?在后一种情况下,您可以创建一个具有ID,Type和Data的表,其中data是可以在代码中恢复的序列化对象(例如,将对象存储为JSON,并使用存储器对其进行反序列化类型和数据)。如果这不能满足您的需求,请多关注一下您的问题。

+0

我需要对对象类型中的数据运行查询,例如,如果添加了ObjectZZ,哪些字段:价格和货币。我希望所有具有币种的令牌EURO – Xeli 2012-08-03 17:28:59

+0

这种上下文要求您为每种类型的对象创建表以允许查询该对象的特定属性。这是由于关系数据库的性质造成的,它不能即时创建列。根据您的总体情况,您最好使用NoSQL解决方案(例如MongoDB),因为这是一个文档存储,它允许您在动态创建的对象上的字段上进行查询,而对性能影响不大。 – 2012-08-03 17:32:15

相关问题