【发布时间】:2020-07-13 16:59:58
【问题描述】:
我正在扩展一个产品销售插件,并试图了解 wordpress 如何处理数据库关系。我正在使用dbDelta 构建激活表。表模式的一个示例是:
$table_schema = [
"CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}plugin_orders` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`people_id` bigint(20) DEFAULT NULL,
`order_id` bigint(20) DEFAULT NULL,
`order_status` varchar(11) DEFAULT NULL,
`order_date` datetime DEFAULT NULL,
`order_total` decimal(13,2) DEFAULT NULL,
`accounting` tinyint(4) DEFAULT '0',
PRIMARY KEY (`id`),
KEY `people_id` (`people_id`),
KEY `order_id` (`order_id`)
) $collate;",
"CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}plugin_order_product` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`order_id` bigint(20) DEFAULT NULL,
`product_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `order_id` (`order_id`),
KEY `product_id` (`product_id`)
) $collate;"
];
我看到每个表中的id 是PRIMARY KEY,但声明另一个KEYs 实际上有什么作用?我读过 wordpress 使用 MyISAM,它实际上并没有建立外键连接。虽然这些表可能指向其他已经存在的表,但在此示例中,声明 KEY order_id (order_id) 是否会创建一个名为 order_id 的任何其他表可以用来引用的变量?此代码是否专门将一个表属性连接到另一个表属性(它似乎不是)?构建这些表后,我可以在 phpMyAdmin 中检查它们,并查看分配了索引但没有外键约束。此代码如何创建将一个表指向另一个表以建立关系的表?
【问题讨论】:
标签: php mysql database wordpress database-design