我有 2 个表 Product
包含商店的产品和 ProductStatus
指示产品是新的、已售出的等。一个产品可能有多种状态。
我需要链接产品和状态。我想了两个办法:
- 添加第 3 个表
ProductToStatus
,它将匹配 ProductId 和 ProductStatusId - 将
Status
列添加到Product
表,该列将包含以逗号分隔的状态 ID("4,12,34,");
上述每种解决方案的优缺点是什么,或者是否有另一种常用方法?
最佳答案
第一种方式是正确的,也是比较常见的。用于对多对多关系建模的表称为连接表、关系表或联结表等名称。
它对您提出的第二种方式的主要改进是:
- 更快的数据库操作——例如,如果您想查找具有特定状态的所有产品,使用连接表的查询将非常快,并创建正确的索引,而您建议的第二种方法将意味着在中搜索给定的子字符串每个产品(这会很慢)。
- 约束检查 - 您可以将
ProductId
和ProductStatusId
列声明为外键,数据库将阻止您为产品分配不存在的状态。<
连接表的主要缺点是添加/修改产品的代码可能更难编写,因为您需要操作更多的数据库记录。幸运的是,现代 ORM 框架负责所有幕后工作。
关于sql - 创建 "Many-To-Many"关系的常用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8340468/