首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >各种/可变内容的PHP/MySQL数据库设计.模块化系统

各种/可变内容的PHP/MySQL数据库设计.模块化系统
EN

Stack Overflow用户
提问于 2010-01-25 21:59:25
回答 1查看 1.1K关注 0票数 2

我正在尝试构建(现在只是思考/规划/绘图关系:)构建基本网站的小模块系统(主要是为了简化我们作为网页设计师经常做的常见任务)。

我对数据库设计和存储内容的整体想法没有什么印象。

1.在大多数网站上(根据我的经验),最痛苦的是,页面的布局/技巧几乎相同,有不同的信息--例如标题、图片和信息集--但是,在cms中制作特殊模板/特殊模块比编辑文本耗费更多的精力--然而,在这里,我们失去了一些操作潜力--我们不能得到“只具有标题”的内容,因为CMS/系统将整个内容理解为一个文本字段。

因此,我想要这两个表-一个用来保存内容的结构(例如,可变数量的照片<1;500) :]、标题和文本&照片(大型)和图库-以及另一个包含“集合”的所有内容、模块和部分的表(我的工作名称是各种结构化信息)?

代码语言:javascript
运行
复制
table module_descriptors (HOW)  
id int  
structure - *???*  

table modules (WHAT)  
id int  
module_type - @link to module_descriptors id
content - *???*  

2.我喜欢的是--我不需要很多表--我不喜欢有6810个表的数据库,每个模块一个表,因为它的描述,用于misc。号码到文字的关系..。我也不喜欢有60列的表格,比如content_uscontent_itcategory_idparent_id

我想我可以保持结构描述和内容本身(注意到 ?)无论是XML还是CSV,但也许我正试图重新发明轮子,而对此的答案隐藏在一些我还没有研究过的设计模式中。

希望我有任何意义,并得到一些答复-告诉我你的意见,正反……或者让我下地狱。谢谢

编辑:我的问题也是:这种方法有意义吗?它是编辑友好的吗?有什么更好的吗?这是道德的吗?我这么做的时候别让小猫死掉?如果我想读取和比较从DB中提取的30个XML(例如,我想比较一些东西),这对服务器来说是不是太过分了?技术部分--如何做--只是问题的一部分:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-25 22:13:05

您所暗示的设计模式称为序列化LOB。对于每个条目相同的属性,您可以以常规的方式(以列的形式)存储一些数据。对于变量属性,将其格式化为XML或MarkDown或任何您想要的内容,并将其存储在文本BLOB中。

当然,您无法使用SQL表达式查询BLOB中的各个元素。在搜索或排序中需要使用的任何内容都应该在常规列中。

重新评论:如果您的文本blob是XML格式的,您可以使用MySQL 5.1及更高版本所支持的MySQL搜索它。但是这不能从索引中受益,所以它会导致搜索速度非常慢。

如果尝试在通配符中使用LIKERLIKE,情况也是如此。如果不使用索引,搜索结果将是全表扫描。

您也可以尝试使用MySQL 全文索引,但是这不是搜索全文数据的好解决方案,因为它无法区分文本内容和XML名称以及XML属性之间的区别。

因此,只需将常规列用于任何要搜索或排序的字段。那样你会更开心的。

Re问题:如果您的文档确实需要可变结构,那么您几乎没有选择。如果使用得当,SQL假设每一行都具有相同的结构(即列)。你的备选方案是:

  • 单表继承混凝土表继承类表继承
  • 序列化LOB
  • 非关系数据库

有些人求助于一种名为实体-属性-值(EAV)的反模式来存储变量属性,但老实说,不要这样做。要了解这件事有多糟糕,请阅读本文:坏CaRMa

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2135978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档