【问题标题】:MySQL db structure decision: many to many using link-table or parent id?MySQL 数据库结构决策:多对多使用链接表或父 ID?
【发布时间】:2012-03-09 12:16:29
【问题描述】:

我有点纠结于决定哪种数据库结构对我来说最适合性能..

我有两张桌子:

Catalogue          Items
ID | Descr        I_ID | Descr

在两个表中,所有行都是唯一的

在关系方面,来自Catalogue 的记录可以有来自Items 的多个记录,但有些记录不会有任何Items

Items 可以与Catalogue 有多个关系,但不一定每个项目都与Catalogue 有关系。

事实 1 - Items 中的记录是 Catalogue 中的 7 倍

事实 2 - 因此,如果 Catalogue 和 Items 之间存在关系 - 这两个表中的关系相同

我最好的选择是什么?

【问题讨论】:

    标签: mysql many-to-many relationship


    【解决方案1】:

    简单的方法是有一个交集表,例如:

    Item_Catalog

    目录 ID |物品编号

    【讨论】:

    • 简单,但搜索性能如何?我有点不确定我的查询将如何加入他们......
    • 好吧,如果你在主键和外键上有索引,它会非常快。
    【解决方案2】:

    制作第三张表,名为catalogue_items。在表 catalogue_items 必须列:

    1. ID --> 参考目录 ID
    2. I_ID --> 参考项目 ID

    每当两者以某种方式相关时,就创造一个新记录。

    我相信这就是您在后续问题中所要求的:

    "Select * from catalogue_items where Catalogue.ID = catalogue_items.ID"
    

    【讨论】:

    • 肯定在其中一个表中使用父ID只会涉及1个JOIN操作,而第三个表会导致2个JOIN?我在这里简化了我的问题,我已经有更多的连接到目录表,但它们与项目无关......
    • 给我一个您可能需要在这里进行的查询示例,我将帮助您创建正确的 SQL 语句。使用这种方法,您可以轻松获取您可能需要的任何数据。
    • 不,实际上上面的查询不起作用,因为我们没有加入Catalogue 表...我需要从Items 中选择所有项目,并在适用的情况下显示Catalogue.Descr - 如何它会用链接表看吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2018-12-05
    • 1970-01-01
    相关资源
    最近更新 更多