如何在数据库中创建动态“类型”

时间:2012-08-03 17:15:18

标签: mysql database database-design

我的问题涉及一个带有mysql数据库的php网站。

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

令牌可以容纳0个或更多“对象”实体,并且这些对象中的每一个都可以是x,y,z类型

所以

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

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

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

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

现在这很好用,因为当我想要一个对象的数据时,由于我们的缓存系统的性质,它几乎总是一个对象,我只能做两个查询来从object和objectX获取数据/ Y / Z

(SELECT * FROM object WHERE id = $id) 

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

但现在我被要求允许网站用户创建新的对象类型,即objectA / B等。

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

(SELECT * FROM $objectType WHERE blabla)

但这似乎不是一个非常干净的解决方案,尤其是新表的创建

有没有更好的解决方案?

值得注意的是,我希望相对于令牌有很多对象,并且额外对象类型的创建不会发生很多/几乎从不

1 个答案:

答案 0 :(得分:1)

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