[英]Models + Database design
我想要完成的事情:
到目前为止,我的方法是:
我不认为上面的速度太差了,但是我觉得它并不特别优雅,而且我正在寻找一种更好的方法来做到这一点,并希望减少缓存/无效的元素数量。 到目前为止,我一直在思考以下问题:
我的主要问题是专辑有独立于其中的内容的日期,视图等,我希望按照不在专辑内的内容日期+应该具有唯一标识符的专辑日期进行排序。 相册也有与内容无关的列。
有没有好办法解决这个问题?
* 编辑 :对于速度,我认为我坚持使用单独的浏览表。 有没有办法让Zend dbTable引用浏览< - >专辑和内容的视图列,以便任一专辑或内容中的onUpdate使用Zend中的CASCADE逻辑更新两个表?
我会在后台编写代码:1张单张图片= 1张为单张的专辑。 因此,浏览单个图像与浏览相册相同。 唯一的区别是当您显示“单张图像”专辑或“普通”专辑时。 由于相册和单张图像都有一个代表内容(图像或封面)的图像,因此它具有敏感性。
表可能是这样的:
t_album (id, type, title, cover_id, ...)
t_image (id, link, thumbnail_id, ...)
t_album_contents (id_album, id_image, comments)
请注意,仅当图像可能位于多个相册中或者可能在同一个相册中多次时,才需要使用表格[t_album_contents]。 否则,该表可能会消失,并在表[t_image]中的[t_album]上替换为外键。
总是最好坚持使用标准化数据库(3NF),并根据您使用的DBMS进行运行时优化(仅在您必须时才违反3NF)...
再说一次,我不能说清楚这一点:避免以任何可接受的费用违反3NF
如果添加违反3NF的内容,请确保数据库的3NF部分在每种可能的情况下都保持完整...冗余的“复制属性”可能导致数据不一致,因此请确保冗余免费3NF部分中的数据你的模型有优先权......例如。 当服务器负载允许时,定期从3NF部件重建冗余部件,或者提供经过测试的更新模式,确保更新仅应用于3NF部件,并且3NF部件上的每次更新都会触发相应冗余数据的重建...这样的方法尝试在从数据库读取时出于性能等原因需要冗余数据时,尽量减少数据损坏的风险
从另一部分(通过命名空间/前缀/等)分离DB的3NF部分也是一个好主意
根据预期的请求(浏览请求数与更新/插入请求数),使用建议的方法和冗余数据是否合理。 在速度方面,不要低估正确的表索引。
对于比较(排序)与其他内容混合的专辑的问题:
为什么内容实体不能代表专辑? 一个专辑就像一个目录......它可以有子目录,这些子目录可以从目录的角度来看......如果以这种方式建模,你会将内容与内容进行比较......额外的属性,取决于特定的内容类型可以在另一个具有1:0-1关系的表中,而“common”可比较属性驻留在内容表中
另一方面,你可以使用一个联合vor,这理想情况下只会慢一点,但可以使两种类型的实体统一,以进行比较和排序......根据预期的请求,缓存这些排序的结果是有意义的每个可浏览的物体
我希望这个能有一点帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.