postgresql - 标签的表结构

标签 postgresql database-design

假设我想在 Postgres 9.3 数据库中存储一些图像 ID 及其标签,这样我就可以:

1) 给定一个图片id,我可以得到它的标签;

2) 给定一个标签,我可以找到那些有这个标签的图像。

哪种表结构更适合这个问题?

a) image_id作为PKEY,tag列将与此图片关联的标签存储为数组;

b) tag为PKEY,image_id列将拥有该tag的image_id存储为数组;

c) (image_id, tag) 作为 PKEY。

d) 其他表结构。

我认为 c) 更好,但我没有任何实际经验,所以有什么建议吗?

谢谢。

最佳答案

您的选项 C 更好,主要是因为它可以通过标签进行索引,并且还可以将外键强制返回到图像表。

解决方案 b 也可以通过标签索引,但不能有良好的外键约束,并且在删除图像时您将不得不运行昂贵的查询。

解决方案 a 具有外键,但无法通过标签索引,并且将是最慢的解决方案,具体取决于具体查询。

关于postgresql - 标签的表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27378342/

相关文章:

sql - PostgreSQL 不会使用主键进行内部连接

sql - MySQL 搜索查询

python - SqlAlchemy:如何在用户之间创建连接,即 make "friends"

ruby-on-rails - 多个 Rails 项目,每个项目都有不同的数据库

node.js - Sequelize CLI : db:migrate results in most columns failing to add

c# - Linq2db:查询对象层次结构的有效方法

sql - 带有忽略条件的 case 语句 postgres 9.3

mysql - 类似 Google Reader 的应用程序的数据库模式和查询

sql - 在SQL中表示 “X of Y”

mysql - 数据库设计 : how to design this peculiar relationship