【发布时间】:2015-07-08 12:09:07
【问题描述】:
Cakephp v3 现在能够支持复合主键。 http://book.cakephp.org/3.0/en/quickstart.html
快速入门指南中给出的一个示例;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
created DATETIME,
modified DATETIME
);
CREATE TABLE bookmarks (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(50),
description TEXT,
url TEXT,
created DATETIME,
modified DATETIME,
FOREIGN KEY user_key (user_id) REFERENCES users(id)
);
CREATE TABLE tags (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
created DATETIME,
modified DATETIME,
UNIQUE KEY (title)
);
CREATE TABLE bookmarks_tags (
bookmark_id INT NOT NULL,
tag_id INT NOT NULL,
PRIMARY KEY (bookmark_id, tag_id),
INDEX tag_idx (tag_id, bookmark_id),
FOREIGN KEY tag_key(tag_id) REFERENCES tags(id),
FOREIGN KEY bookmark_key(bookmark_id) REFERENCES bookmarks(id)
);
快速入门指南提到"You may have noticed that the bookmarks_tags table used a composite primary key. CakePHP supports composite primary keys almost everywhere, **making it easier to build multi-tenanted applications**."
多租户应用程序是什么意思?在这种情况下,为什么使用复合主键比使用单一主键更好?
【问题讨论】:
-
最好在某些地方使用复合主键而不是到处使用。如您所见,我们在这里不需要任何其他主键,并且如果组合起来,两个键本身都可以用作主键,因此最好在此处使用复合主键。
-
几乎在所有地方都支持复合主键,使得构建多租户应用程序变得更加容易。应该阅读让它可能 构建关系数据库。 是否已租用。关系键是复合键,就这么简单。如果你没有关系键,你就没有关系数据库、关系完整性、能力或速度......你有一个记录归档系统。
标签: mysql cakephp database-design primary-key composite-primary-key