Wordpress Relational Database

时间:2019-08-31 作者:Rowayda Khayri

我们可以将Wordpress数据库视为关系数据库吗?有些表相互关联,但它不适用于外键。那么,它是关系数据库吗??

2 个回复
SO网友:Matthew Brown aka Lord Matt

数据库中的数据具有函数关系。例如user_metauser. 在这方面,它将被视为关系数据。

另一方面,如果你的意思是,引用完整性是严格执行的,不,它不是。这主要是MyISAM的产品,速度更快,但不支持外键检查。总的来说,对于WordPress这样的项目WHERE 条款已经足够了。

这通常与大多数使用MySQL的项目相同-表关系通过命名来暗示,但在逻辑层而不是数据层强制执行。这是因为只有WordPress需要读取数据库,而没有其他内容。因此,没有理由将数据和关键服务付诸行动(据我所知,这是MyISAM背后的设计原理)。

如果你深入挖掘WordPress的核心,你会发现WHERE 子句甚至联接,它们期望一个表中的数据与另一个表中的数据之间存在关系。如果个人评论无法追溯到其发表的帖子,则评论将不起作用。这就是为什么评论和帖子被认为是相关的。

TL;DR:是的,但由于设计方面的考虑,没有强制执行关键关系。

至于WordPress是否涵盖了第三范式的要求,这是另一场争论。

SO网友:Frank P. Walentynowicz

外键约束不能用于MyISAM表。InnoDB表支持它们。您可以使用以下代码将所有MyISAM表更改为InnoDB表:

function changeAllMyIsamToInnoDB() {
    global $wpdb;

    $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = \'your-database-name\' 
        AND ENGINE = \'MyISAM\'";

    $rs = $wpdb->get_results($sql);

    foreach ($rs as $row) {
        $tbl = $row->TABLE_NAME;
        $sql = "ALTER TABLE `$tbl` ENGINE=INNODB";
        $wpdb->query($sql);
    }
}
changeAllMyIsamToInnoDB();

Do your database backup, first!

将上述代码插入函数。当前主题的php,替换your-database-name 使用数据库的名称。

更改完成后删除代码。

相关推荐

Database size Widget

有没有办法在WordPress管理区域小部件上显示数据库大小?我不希望它出现在页面的顶部或底部,我需要它出现在我正在创建的小部件中。。谢谢