假设您有一个关系需要以某种方式引用另一个表中的任何(变量)数量的不同项目(通过其键)。如何实现这一目标?
答案 0 :(得分:1)
为此,您通常会有一个中间表。这是一个示例模式
Table - Question
QuestionID
Title
Body
Date
Table - Tag
TagID
TagName
Table - QuestionTag
QuestionID
TagID
在诸如此类的模式中,问题表包含问题。标签表包含可应用于问题的标签列表(如此站点上)。 QuestionTag将两者联系在一起,这样一个问题可以链接到任意数量的标签。要使用它的标签获得特定问题,您可以执行以下操作
SELECT Question.QuestionID, Question.Title,Question.Body,Question.Date,GROUP_CONCAT(Tag.TagName)
FROM Question
LEFT JOIN QuestionTag
ON Question.QuestionID = QuestionTag.QuestionID
LEFT JOIN Tag
ON QuestionTag.TagID = Tag.TagID
WHERE Question.QuestionID=@QuestionID
GROUP BY Question.QuestionID
答案 1 :(得分:1)
使用示例:
对于书店,作者可以拥有任意数量的书籍。
+Table_Author+
--------------
id
name
--------------
+Table_Book+
------------
id
title
author_id <--this is the key!
------------
然后你可以获得特定作者的每本书:
SELECT books.title FROM Table_Book books WHERE books.author_id=2
内容类型方法:
+Table_contentype+
-------------------
id
name
table_name_from_model --don't know how to properly call it
-------------------
+Table_Person+
---------------
id
name
---------------
+Table_Person_Objects+
-----------------------
id
person_id
content_type_id
object_id
-----------------------
Then your person can have, for example:
+Table_contentype+
--------------------------------------
id name table_name
--------------------------------------
1 Item A items_a_table
1 Item B items_b_table
--------------------------------------
+Table_Person_Objects+
--------------------------------------------------
id person_id content_type_id object_id
--------------------------------------------------
1 1 1 1
2 1 1 4
3 1 2 2
4 2 1 1
--------------------------------------------------
这样,Person 1可以有2个Items_A(1,4)1 Item_B(2),而person 2可以拥有与Person 1相同的Item_A(1)。
我认为这是我能想到的最灵活的方案。
答案 2 :(得分:1)
您能举个例子吗?也许您的架构可以重构,以便它不需要这样的花哨约束?
明显:根据需要定义多个约束。
定义可防止表格中出现不满足关系的行的触发器。
但我仍然怀疑可以重新定义表结构以简化事情。