【问题标题】:Database Design: Assigning a File to multiple Users数据库设计:将文件分配给多个用户
【发布时间】:2019-04-22 08:38:38
【问题描述】:

出于学习 Laravel 的原因,我目前正在创建一个文件共享系统。目前可以上传文件,然后再下载它们。现在我想扩展它,使多个(但不是所有人)可以下载一个文件。

目前我有一个用户表,并且在文件表中引用了用户 ID。这样我就知道哪个文件属于哪个用户。

文件表看起来有点像这样:

id |  filename | user_id |

1  |  doc.php  |    2    |

2  |  fly.php  |    4    |

3  |  dog.jpg  |    3    |

4  |  cat.gif  |    2    |

等等...这样我就可以检查 user_id 是否与经过身份验证和登录的用户相同。

问题是我无法弄清楚如何让多个用户 (10-20) 可以访问一个文件。 我是否只是创建一个如下所示的新表:?

user_id | file_id_1 | file_id_2 |

1       |     3     |     6     |

并且每次将附加文件分配给用户时,都会创建一个新列?

对我来说,这似乎是非常糟糕的数据示意图。

【问题讨论】:

  • 您需要有一个files_users 表,其中包含file_iduser_id 列。查找file_id 与特定文件匹配的所有行以获取可以访问它的列表。查找user_id 与特定用户匹配的所有行,以获取他们可以看到的文件列表。这被称为“多对多”关系,你会在 Laravel 中经常遇到它。
  • 非常感谢格雷格。我会调查的。

标签: php database laravel database-design phpmyadmin


【解决方案1】:

K

正如@Greg 已经评论的那样,您最好使用数据透视表将文件和用户相互链接。

这将允许您使用 hasManyThrough 关系来获取用户可访问的所有文件以及有权访问文件的所有用户

https://laravel.com/docs/5.7/eloquent-relationships#has-many-through

【讨论】:

  • BelongsToMany,而不是 hasManyThrough
  • @Devon BelongstoMany 可用于建立 hasManyThrough 关系。 hasManyThrough 允许直接从用户到文件的关系和反向关系,但需要已经创建所有模型之间的关系
猜你喜欢
  • 2014-06-04
  • 1970-01-01
  • 2017-01-04
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多