【发布时间】:2011-06-15 20:33:05
【问题描述】:
我有一个数据库设计,它使用复合主键来确保唯一性,这也是外键。
这些表然后以相同的方式链接到其他表,因此最终复合键最多可以得到 4 或 5 列。这导致了一些相当大的 JOIN,所以我认为一个简单的解决方案是使用自动增量列,该列不是主键的一部分,而是用作其他表的主键的一部分。
这里是一些显示一般布局的伪代码:
CREATE TABLE Item (
id AUTO_INCREMENT,
...
PRIMARY KEY (id)
) ENGINE = InnoDB;
CREATE TABLE PriceCategory (
id AUTO_INCREMENT,
...
PRIMARY KEY (id)
)
CREATE TABLE ItemPriceCategory (
itemId,
priceCategoryId,
id AUTO_INCREMENT,
...
UNIQUE INDEX id,
PRIMARY KEY (eventId, priceCategoryId)
)
CREATE TABLE ClientType (
id AUTO_INCREMENT,
...
PRIMARY KEY (id)
)
CREATE TABLE Price (
itemPriceCategoryId,
clientTypeId,
id AUTO_INCREMENT,
...
UNIQUE INDEX id,
PRIMARY KEY (itemPriceCategoryId, clientTypeId)
)
table Purchase (
priceId,
userId,
amount,
PRIMARY KEY (priceId, userId)
)
表的名称已更改以保护无辜者 ;-) 而且实际布局在引用方面更深一些。
那么,我的问题是,从性能和数据完整性的角度来看,这是一个可行的策略吗?在Purchase 表中包含所有引用表中的所有键是否更好?
提前致谢。
【问题讨论】:
标签: mysql database-design