使用整数数组设置外键

Setting up foreign key with an array of integers

我对使用 SQL 还很陌生,但我在 Stack Overflow 上遇到过这个关于使用标签的问题。

Recommended SQL database design for tags or tagging

这导致我在我的数据库中创建了以下 tables:

文档

---------------------------------------------------------------
| Doc Id (PK)(int) | Doc Title (varchar) | Doc Link (varchar) |
---------------------------------------------------------------
| 1                | Printing            | http://example.com |
---------------------------------------------------------------
| 2                | Format              | http://example.com |
---------------------------------------------------------------

标签

--------------------------------------
| Tag Id (PK)(int) | Title (varchar) |
--------------------------------------
| 1                | print           |
--------------------------------------
| 2                | guide           |
--------------------------------------
| 3                | support         |
--------------------------------------

文档标签

---------------------------------
| DocId (int) | TagId (varchar) |
---------------------------------
| 1           | 1, 3            |
---------------------------------
| 2           | 2, 3            |
---------------------------------

但是,我无法在 DocTag table 和其他两个之间创建外键,因为我需要在 DocTagTagId 中创建一个排序数组因为一个文档可以有很多标签。尝试创建主键时出现错误,我认为这是因为 TagId.

中的 varchar 变量

有什么克服这个问题的建议?

文档标签

---------------------------------
| DocId (int) | TagId (int)     |
---------------------------------
| 1           | 1               |
---------------------------------
| 1           | 3               |
---------------------------------
| 2           | 2               |
---------------------------------
| 2           | 3               | 
---------------------------------

外键必须与它们引用的列的数据类型匹配。

每个外键引用必须是单个值。没有 comma-separated 个列表。

将每个 TagId 值放在一行中,即使您必须重复 DocId。

my answer to: "Is storing a delimited list in a database column really that bad?"