首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为项目分配特定标签的数据库设计

为项目分配特定标签的数据库设计
EN

Stack Overflow用户
提问于 2012-10-29 07:40:27
回答 3查看 268关注 0票数 0

我正在尝试建立一个小系统,将分配特定的标签到一个项目,或一个人,准确地说。因此,我有一个人员列表和一个标记列表。我需要为每个人分配3个特定的标签(对应于这个人可能拥有的3种不同技能)。

简而言之,输出将如下所示:

代码语言:javascript
复制
Person 1 | webdesign, ux, jquery
Person 2 | blogging, photography, wordpress
Person 3 | graphic-design, 3d, inventor
...

目前,这些列表存储在两个不同的表中:

代码语言:javascript
复制
persons
-------
person_id
person_name

tags
-------
tag_id
tag_name

我的主要目标是避免重复,并简单地将3个现有的标签分配给一个现有的人。

你能给我一些关于如何实现这个的提示吗?我知道three-table设计在标签系统中很常见,但它与我的情况相关吗?

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-29 07:45:19

如果您希望确保没有任何重复项并且能够向人员添加N标签,那么为了正确地实现规范化设计,您需要第三个表来将tags链接到每个person

代码语言:javascript
复制
persons_2_tags
--------------
person_id
tag_id

为了保证唯一性,您可以使用复合主键,或者向包含两列的表中添加一个unique index

请参阅此SQL Fiddle中的上述示例。

如果需要在数据库级别强制实施3个标记的限制,可以向persons_2_tags表(例如tag_number)添加第三列,该列是一个值为1, 2, 3enum,并将其添加到unique index中。插入逻辑需要在应用程序级别处理,但将由index强制执行。

票数 3
EN

Stack Overflow用户

发布于 2012-10-29 07:51:20

您的需求是否指定了“精确”3个标签?

建议第三个表保持规范化。这是一个典型的多对多关系。这提供了最大的灵活性,因为您可以拥有一个无限但唯一的用户/标记对列表。

对于每个标记,在用户表中可以有3列。性能的提高将以牺牲灵活性为代价。像"List the users with tag = 'X'“这样的查询就有点难了。如果您允许的标签少于3个,则可能会有多个空值。当然,在这个设置中,您必须创建一个新列和大量代码来扩展到超过三列。

票数 1
EN

Stack Overflow用户

发布于 2012-10-29 08:01:34

我想我可能会做Jeff O提到的三个表的设计,然而,只是为了呈现另一种视图……

如果您只讨论标记,即没有其他元数据的短字符串,我不知道您是否需要tags表。本质上,标签本身可以是它的id。

代码语言:javascript
复制
persons (person_id, person_name);
tags (person_id, tag);

是的,你会得到一些重复,但无论如何,它们都是短字符串,这应该真的会有所不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13114180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档