我正在处理一个将多种对象保存到数据库的项目。这些包括:文章,民意调查,作家等等。其中一些在设计时是未知的,所以我想要做的是构建一个通用表模式,使我能够将任何类型的项目保存到此数据库中。对象和对象元模式设计
我的设计
表对象
objectID int
title varchar
body text
type int #will represent the ID of the type of object am inserting
有了这样的情况或需求可能需要额外的数据,我决定,这将去我所谓的“对象元数据”的方法如下:
表Object_MetaData
metaID int
metaKey varchar
metaIntKey int #representing an integer value of metaKey which is calculated using some algorithm to speed up queries
metaValue varchar(1000)
我正在做所有的工作在PHP和MySQL顺便说一句。
这样的设计对于数据库中的长运行时的表现一对夫妇的事情耽搁了我的脑海里:
1)节约整型,布尔型,小文,大文成metaValue effecient? 2)长期来看,元数据表将会快速增长。这是维护恶梦吗? MySQL将如何处理这个问题?在获取对象时,我将不得不循环每个对象以获取其元数据,或者使用延迟加载一次加载所有元数据,或者在通过__get魔术方法请求加载任何单个元键时加载所有元数据。因此,当提取50个对象的列表时,当使用我建议的任何方法时,至少会执行50个选择语句。有没有更好的方法来做到这一点?
欢迎对此设计发表任何想法或意见。
谢谢,所以这基本上意味着我必须克隆表,并根据需要添加列到每个表右?这是否会导致每张桌子的设计都有重复?这也要求例如“物品”表在每次新的要求需要新的信息与物品一起存储时必须被修改。元对象设计似乎更灵活,这样在运行时不需要更改。你怎么看? – Maverick 2011-02-18 22:55:21