我正计划实施一个基本的 CMS,我将在内部用于我自己的开发。我想根据自己的需要开发一个定制的 CMS —— 比 Dreamweaver 更轻、更便携、更少冗余,但面向已经知道如何编码并且只需要整合信息的人。本质上,该计划是将所有内容存储在 MySQL 数据库中,将其全部缓存在文件系统上,然后,每当通过获取 PHP 文件查询数据时,都会向数据库发送一个简单查询,以检查该资源上次更新的时间,如果系统上的缓存文件足够新,则从缓存目录中拉取;否则,缓存文件将被覆盖。
CMS 会将所有上传的内容存储在数据库中,以便在系统需要移动到另一台主机等时将所有内容放在一个位置。它还使备份非常简单,并且可以轻松扩展以实现差异/修订存储库等.
我想创建一个包含通过 CMS 界面创建的所有文件和资源(页面、模板等)的单个表(例如“资产”)。理想情况下,这将处理两种类型:ASCII(文本)和二进制(BLOB)。
表“资产”
id INT,slug VARCHAR,ascii LONGTEXT,二进制 LONGBLOB,类型 INT,元 TEXT,修改日期,...
我的问题是,将这些信息放在一张表中是否有意义?“资产”表中的任何给定行都只能在 ascii 列或二进制列中具有值,但绝不会在两者中都有。这会浪费空间吗?完全减慢这个过程?
永远不会不必要地选择列。“type”字段将对应于“types”表中的 id,该表将列出文本类型(html、模板、纯文本等)和二进制类型(png、jpg、pdf、mp3、mp4 等)。所以我可以这样查询:
(显然是伪代码)
$lastModified = SELECT modified FROM assets WHERE slug = $asset_slug;
if last_modified_date_of_file("cache/$asset_slug") != $lastModified :
$type_id = SELECT type FROM assets WHERE id = $asset_id;
$type_col = SELECT col FROM types WHERE id = $type_id;
if $col == 'ascii'
cache_file("cache/$asset_slug", SELECT ascii FROM assets WHERE slug = $asset_slug);
else
cache_file("cache/$asset_slug", SELECT binary FROM assets WHERE slug = $asset_slug);