【问题标题】:a question on many-many relationships关于多对多关系的问题
【发布时间】:2011-01-05 08:54:50
【问题描述】:

我有以下表格

  1. 项目
  2. 类似
  3. items_similars = 数据透视表

items->similars 有多对多的关系

items_similars 有以下字段

  1. item_id
  2. similar_id

如果我使用 InnoDB 作为引擎,是否需要在 items.id 和 items_similars.id 之间创建关系?或在similars.id 和items_similars.id 之间?或者两者兼而有之?

这样做或不这样做有什么好处?

【问题讨论】:

  • 重新标记为包括 innodb,因为您的问题似乎集中在它上。希望没关系。

标签: database database-design innodb


【解决方案1】:

CREATE TABLE item_similar
  ( 
   item_id int NOT NULL
  ,similar_id int NOT NULL
  ,PRIMARY KEY ( item_id, similar_id )
  ,FOREIGN KEY ( item_id ) REFERENCES item ( item_id ) ON UPDATE CASCADE
    ON DELETE NO ACTION
  ,FOREIGN KEY ( similar_id ) REFERENCES similar ( similar_id ) ON UPDATE CASCADE
    ON DELETE NO ACTION
  )

【讨论】:

    【解决方案2】:

    多对多关系,AFAIK,只能通过 RDBMS 中的转换表(数据透视表)来实现。 “items_similar”表至少应该有“items_id”和“similar_id”,它们是“items”和“similars”表主键的外键。

    【讨论】:

    • 正确。为提问者拼写出来:字段 -> 外键 items_similar.item_id -> items.id items_similar.similar_id ->similar.id items_similar.id -> nothing
    • @Ygam 虽然我们倾向于在设计阶段(表规范化)省略主键“items_similar.id”,但出于性能目的,我建议在实施时使用它。
    猜你喜欢
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2015-07-09
    • 2014-11-11
    相关资源
    最近更新 更多