1

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

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

一个令牌可以包含 0 个或多个“对象”实体,这些对象中的每一个都可以是 x、y、z 类型

所以

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

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

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

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

现在这工作正常,因为当我想要来自一个对象的数据时,由于我们缓存系统的性质,这个对象几乎总是一个对象,我可以进行两次查询以从对象和 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)

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

有没有更好的解决方案?

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

4

1 回答 1

1

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

于 2012-08-03T17:20:42.540 回答