【发布时间】:2012-08-21 07:23:08
【问题描述】:
此表格包含用户的照片(缩略图和完整照片)。
大多数查询都会有一个“WHERE user_id =?”条件。
CREATE TABLE photos (
"photo_id" serial, -- serial is postgres' autoincrement
"user_id" integer not null, -- foreign key to users table
"filename_thumbnail_50" varchar not null,
"filename_thumbnail_75" varchar not null, -- 75px x 75px thumbnail
"filename_full" varchar not null,
PRIMARY KEY ("photo_id", "user_id")
);
此用例的最佳设计和/或性能设计是什么:
- 两列主键,如上例?
- 一个主键 (photo_id) 和 user_id 上的索引?
【问题讨论】:
-
您拥有的两列主键实际上没有任何意义恕我直言。不应该是
(photo_id)还是(user_id, filename)? -
对不起,我已经更新了我的例子,所以有点复杂
-
对于表中的每一行,每一列的值都应该依赖于“键,整个键,只有键”。 “依赖于”表示“正确的值由...标识”在序列列中添加
user_id会破坏第二部分;您的表格不会处于第二范式,并且会受到相关异常的影响。请参阅任何有关关系数据库规范化的书籍或文章。 -
一个键是一个最小的超键——一组应该是不可约唯一的属性。唯一性约束是强制执行该规则的原因。从您的问题来看,您似乎不了解您的要求( photo_id 本身是否旨在唯一?)或者您不了解密钥。
标签: sql database postgresql primary-key normalization