Php 您如何处理相同多对多关系的多种类型?
我想知道在同一个表之间建立多对多关系时是否有最佳实践 目前,对于用户创建的项目,Php 您如何处理相同多对多关系的多种类型?,php,mysql,database,Php,Mysql,Database,我想知道在同一个表之间建立多对多关系时是否有最佳实践 目前,对于用户创建的项目,user和item之间存在多对多关系 --------------------- | user_id | item_id | --------------------- | 1 | 3 | --------------------- 我想为用户和项目创建另一个连接表,以引用他们的观察列表。我应该创建单独的多对多表吗 user_item_inventory user_item_wat
user
和item
之间存在多对多关系
---------------------
| user_id | item_id |
---------------------
| 1 | 3 |
---------------------
我想为用户
和项目
创建另一个连接表,以引用他们的观察列表。我应该创建单独的多对多表吗
user_item_inventory user_item_watchlist
--------------------- ---------------------
| user_id | item_id | | user_id | item_id |
--------------------- ---------------------
| 1 | 3 | | 2 | 3 |
--------------------- ---------------------
或者我应该创建一个多对多表,该表与user\u item\u type
表具有多对一关系
user_item user_item_type
------------------------------- ------------------
| user_id | item_id | type_id | | id | name |
------------------------------- ------------------
| 1 | 3 | 1 | | 3 | inventory |
------------------------------- ------------------
| 2 | 3 | 2 | | 2 | watchlist |
------------------------------- ------------------
这取决于您希望如何使用这些数据。如果它们在逻辑上是分开的,并且它们之间没有关联,那么您可以使用两个表。 如果要在某些模块中显示库存和观察列表记录,并且只想区分记录的类型,则可以使用一个记录类型为的表 很明显,对于数据库引擎,这样做更好
SELECT * FROM user_item_inventory
比
SELECT * FROM user_item WHERE type_id = 1
虽然最终的决定取决于库存和愿望清单在概念上的不同程度,但基于之前的经验,我建议使用单独的表格 目前,您没有附加到库存或观察列表的其他数据,但将来不一定如此。如果不了解有关库存和观察列表的更多详细信息,就很难做出预测,但是只要您想开始跟踪
库存
关系与观察列表
关系上的其他数据,使用单独的表将使事情变得更简单。只要您想添加只属于您的一种关联类型的列,您就需要有单独的表
正如在另一个答案中指出的那样,从纯数据存储和检索的角度来看,使用单独的表肯定更快:您将少一个要填充/筛选的列/索引。如果您的库存/愿望列表关联表变得“大”,那么这些额外的type\u id
引用将开始增加一些重要内容。(对于较小的大小来说无关紧要,但除了明显的磁盘存储因素外,更多的数据需要更多的内存和更多的缓存来管理,特别是在涉及索引的情况下。)
如果您需要知道用户感兴趣的所有项目(库存、观察列表和您可能创建的任何其他类似表的组合),那么单独的表将是一个复杂的问题,但是如果这是一个实际需要,那么您可以通过对所有表的
UNION
查询轻松地生成该列表。(如有必要,您甚至可以创建另一个包含所有用户项引用副本的表作为性能增强。)我将创建单独的多对多表,然后,如果我需要两个列表中的项,请使用“选择不同的并集”。我认为这可能取决于用户项是否趋向于增长。如果趋向于增长,您可能希望将其分离。您的第一点非常好,将来可能会有更多数据以该特定关系类型存储。从这个意义上讲,拥有单独的表格更能证明未来。