摘要:表A有一行,其中包含引用表B中ID的整数列表。
为什么不在表B中创建一个引用表A的列?因为表B中的项目是可重用的,并且适用于表A中的许多行。
具体示例:教育软件,包括课程和订单项。每个课程都包含许多订单项,每个订单项都会在许多课程中使用。
这种多对多链接是一项常见任务,我可能永远都做错了。我过去最简单的方法是让表A包含带有分隔列表的varchar,在代码中解释该列表,然后运行另一个查询以从表B中获取所需信息。
有更优雅的方式吗?将SET数据类型的功能与外键索引相结合的一些方法吗?
答案 0 :(得分:0)
对于多对多关系,您将使用3个表:
表 Lesson
:
列:ln_id
,ln_lesson_name
表 LineItem
列:li_id
,li_line_detail
和关系表 LineOfLesson
列:ls_lesson_id
(引用Lesson表中的id),ls_line_item_id
(引用LineItem表中的id)
通过查询这三个表,您可以获得使用特定行的课程或构成特定课程的行。
旁注:在关系表中,两个ID一起是表的自然主键。
此外,如果有关于关系的附加信息,例如,也可以在此添加,您可以添加订单项的添加时间。
答案 1 :(得分:0)
您需要的是通过关系表完成的。
A 是 B
的一对一A 是 B
中的一对多A 是多对多
这些是标准模式。