如何处理规范化数据库中的标签?

时间:2010-12-24 02:00:33

标签: mysql database-design tags normalization

我正在尝试规范化我正在构建的数据库。其中一部分是我有许多不同的测试,每个测试可以有许多不同的标签。你会怎么处理这个?

您是否有一个包含标签的表格,然后对每个测试的标签数量进行限制?

我是数据库的新手,更不用说正常化的整个想法了,如果这是一个非常简单的问题,请原谅我。

2 个答案:

答案 0 :(得分:4)

通常,这将使用两个表来处理。一个tags表,每个记录由tag_idtag_name组成(可能包含您想要包含的其他元数据)。然后,标签将通过另一个表test_tags与其测试相关联,其中test_idtag_id将被存储。

如果您想限制每次测试的代码数量,您可以轻松运行SELECT COUNT(tag_id) FROM test_tags WHERE test_id=#查询,以确定他们已经添加了多少代码。

答案 1 :(得分:2)

通常你会这样做的方法是有一个表tags,如:

INT id PRIMARY KEY
VARCHAR(255) name

然后,对于允许标记的每个对象,您需要一个桥接表。因此,如果您有另一个表tests,并且有自己的id列,那么您将拥有另一个表tests_tags

INT test_id PRIMARY KEY
INT tag_id PRIMARY KEY

然后,您可以通过获取测试ID来枚举所有带有标记的测试,其中tag_id是您感兴趣的标记ID;同样,您可以通过获取标签ID来枚举测试中的所有标签,其中test_id是您感兴趣的测试ID。

这是建立多对多关系的标准方法。