使用整数数组设置外键
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 和其他两个之间创建外键,因为我需要在 DocTag
的 TagId
中创建一个排序数组因为一个文档可以有很多标签。尝试创建主键时出现错误,我认为这是因为 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?"
我对使用 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 和其他两个之间创建外键,因为我需要在 DocTag
的 TagId
中创建一个排序数组因为一个文档可以有很多标签。尝试创建主键时出现错误,我认为这是因为 TagId
.
有什么克服这个问题的建议?
文档标签
---------------------------------
| 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?"