在这种情况下,绝对必要的多对多关系?

时间:2012-01-25 21:16:51

标签: mysql database-design cakephp

我有以下型号:资产和用户 资产属于用户 用户拥有多种资产

简单的数据库模型看起来像这样

USER
id
name


ASSET
id
name
user_id

现在的问题是关于一个下载表来模拟用户可以下载许多资产的事实,许多用户可以下载资产。

在cakePHP中,它将是一个users_assets表,其中包含一个简单的模型:

USERS_ASSETS (alias Downloads)
id
user_id
asset_id

但这很令人困惑,因为如果你使用蛋糕烘焙功能,你必须分配 用户和资产之间不止一种关系,上述关系和新的HABTM关系:即:

assets belongsTo Users | users hasMany assets
assets hasAndBelongsToMany user | users hasAndBelongsToMany assets

为什么我不能只有一个名为downloads的表格与关系:

user belongsTo downloads | downloads hasMany Users
asset belongsTo downloads| downloads hasMany Assets

DOWNLOADS:
id
user_id
asset_id

我想我不确定是否可以为一组给定的模型定义多个关系。

哪个是最佳选择以及为什么 - 使用带有下载别名的users_assets表让蛋糕了解HABTM关系。或者在没有HABTM关系的情况下使用名为downloads的表更好。

1 个答案:

答案 0 :(得分:1)

在您的情况下,我将创建一个单独的下载模型,并具有“用户hasmany下载”“downlload belongssto user”,“download belongssto asset”和“asset hasmany downloads”。无论如何,这就是habtm的含义。这样下载模型可以有其他有趣的数据,比如下载的日期和时间。除非你需要以非常简单的方式访问用户下载的资产列表并且不关心链接表,否则我不会理解habtm关系。通过链接表的方式可以调用你想要的任何东西,你可以称之为下载,仍然采用habtm的做事方式。

关于您的其他问题,是的,您可以与模型建立多种关系。你只需要使用不同的键。例如,资产可以“属于”所有者,它是用户,也“属于”作为不同用户的编辑者。