gpt4 book ai didi

php - 对象和对象元模式设计

转载 作者:行者123 更新时间:2023-11-29 02:36:01 25 4
gpt4 key购买 nike

我正在从事一个将多种类型的对象保存到数据库中的项目。其中包括:文章、民意测验、作家 .. 等。其中一些在设计时是我不知道的,所以我想做的是构建一个通用表模式,使我能够将任何类型的项目保存到该数据库中。

我的设计

表格对象

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) 将 int、boolean、小文本、大文本保存到 metaValue 中是否有效?

2) 从长远来看,元数据表将增长得相当快。这是维护的噩梦吗? MySQL 将如何处理这个问题?

3) 在 php 中获取对象时,我将不得不循环每个对象以获取其元数据,或者使用延迟加载加载所有元数据一次,或者在通过 __get 魔术方法请求时加载任何单个元键。因此,当获取包含 50 个对象的列表时,使用我建议的任何方法时,至少会执行 50 个 select 语句。有更好更有效的方法吗?

欢迎对此设计提出任何想法或意见。

最佳答案

我建议重新设计您的解决方案。这种模式称为“实体属性值”(EAV),通常被视为反模式。相反,在列中定义元数据属性(在同一个表中,如果需要的话,也可以在另一个表中)。还要使用正确的数据类型。

我建议给 Bill Karwin's book SQL AntiPatterns一读。它有一些很棒的见解,可以专门为您提供帮助。您可以从 this presentation 中了解其中的一些内容。 ...

关于php - 对象和对象元模式设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com