MYSQL外键集

时间:2017-12-06 18:02:30

标签: mysql set foreign-keys

摘要:表A有一行,其中包含引用表B中ID的整数列表。

为什么不在表B中创建一个引用表A的列?因为表B中的项目是可重用的,并且适用于表A中的许多行。

具体示例:教育软件,包括课程和订单项。每个课程都包含许多订单项,每个订单项都会在许多课程中使用。

这种多对多链接是一项常见任务,我可能永远都做错了。我过去最简单的方法是让表A包含带有分隔列表的varchar,在代码中解释该列表,然后运行另一个查询以从表B中获取所需信息。

有更优雅的方式吗?将SET数据类型的功能与外键索引相结合的一些方法吗?

2 个答案:

答案 0 :(得分:0)

对于多对多关系,您将使用3个表:

Lesson
列:ln_idln_lesson_name

LineItem
列:li_idli_line_detail

和关系表 LineOfLesson
列:ls_lesson_id(引用Lesson表中的id),ls_line_item_id(引用LineItem表中的id)

通过查询这三个表,您可以获得使用特定行的课程或构成特定课程的行。

旁注:在关系表中,两个ID一起是表的自然主键。

此外,如果有关于关系的附加信息,例如,也可以在此添加,您可以添加订单项的添加时间。

答案 1 :(得分:0)

您需要的是通过关系表完成的。

A B

的一对一
  • A或B应包含另一个的ID。

A B

中的一对多
  • B应包含A的ID。
使用 B

A 是多对多

  • 创建一个关系表AB,其中包含A和B的ID。

这些是标准模式。