2014-12-09 27 views
1

表结构说我要存储在一个Postgres 9.3 DB一些图像ID和他们的标签,让我可以:标签为

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

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

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

a)image_id作为PKEY,第tag列将与该图像相关联的标签存储为数组;

b)tag作为PKEY,栏image_id存储将该标签作为数组的图像ID;

c)(image_id, tag)作为PKEY。

d)其他表结构。

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

谢谢。

+1

c是几乎适用于任何使用关系数据库的情况下的默认解决方案。 – 2014-12-09 11:56:44

+0

你想用数据库做什么?如果它只是图像id和标签,听起来像是过度杀伤,没有数据库就会有更好的解决方案。这些图像ID和多人标签?他们是共享的吗?图像是否存储在数据库中? – Patrick 2014-12-09 12:11:00

回答

1

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

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

解决方案a具有外键,但不能通过标记进行索引,并且是解决方案中速度最慢的,具体取决于具体查询。