我正在尝试构建(现在只是思考/规划/绘图关系:)构建基本网站的小模块系统(主要是为了简化我们作为网页设计师经常做的常见任务)。
我对数据库设计和存储内容的整体想法没有什么印象。
1.在大多数网站上(根据我的经验),最痛苦的是,页面的布局/技巧几乎相同,有不同的信息--例如标题、图片和信息集--但是,在cms中制作特殊模板/特殊模块比编辑文本耗费更多的精力--然而,在这里,我们失去了一些操作潜力--我们不能得到“只具有标题”的内容,因为CMS/系统将整个内容理解为一个文本字段。
因此,我想要这两个表-一个用来保存内容的结构(例如,可变数量的照片<1;500) :]、标题和文本&照片(大型)和图库-以及另一个包含“集合”的所有内容、模块和部分的表(我的工作名称是各种结构化信息)?
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_us
,content_it
,category_id
,parent_id
。
我想我可以保持结构描述和内容本身(注意到? ?)无论是XML还是CSV,但也许我正试图重新发明轮子,而对此的答案隐藏在一些我还没有研究过的设计模式中。
希望我有任何意义,并得到一些答复-告诉我你的意见,正反……或者让我下地狱。谢谢
编辑:我的问题也是:这种方法有意义吗?它是编辑友好的吗?有什么更好的吗?这是道德的吗?我这么做的时候别让小猫死掉?如果我想读取和比较从DB中提取的30个XML(例如,我想比较一些东西),这对服务器来说是不是太过分了?技术部分--如何做--只是问题的一部分:)
发布于 2010-01-25 22:13:05
您所暗示的设计模式称为序列化LOB。对于每个条目相同的属性,您可以以常规的方式(以列的形式)存储一些数据。对于变量属性,将其格式化为XML或MarkDown或任何您想要的内容,并将其存储在文本BLOB中。
当然,您无法使用SQL表达式查询BLOB中的各个元素。在搜索或排序中需要使用的任何内容都应该在常规列中。
重新评论:如果您的文本blob是XML格式的,您可以使用MySQL 5.1及更高版本所支持的MySQL搜索它。但是这不能从索引中受益,所以它会导致搜索速度非常慢。
如果尝试在通配符中使用LIKE
或RLIKE
,情况也是如此。如果不使用索引,搜索结果将是全表扫描。
您也可以尝试使用MySQL 全文索引,但是这不是搜索全文数据的好解决方案,因为它无法区分文本内容和XML名称以及XML属性之间的区别。
因此,只需将常规列用于任何要搜索或排序的字段。那样你会更开心的。
Re问题:如果您的文档确实需要可变结构,那么您几乎没有选择。如果使用得当,SQL假设每一行都具有相同的结构(即列)。你的备选方案是:
有些人求助于一种名为实体-属性-值(EAV)的反模式来存储变量属性,但老实说,不要这样做。要了解这件事有多糟糕,请阅读本文:坏CaRMa。
https://stackoverflow.com/questions/2135978
复制相似问题