【问题标题】:Laravel the right way for Many to Many table structureLaravel 多对多表结构的正确方法
【发布时间】:2019-08-17 18:03:50
【问题描述】:

我有一个多对多的关系。假设我有很多用户可以在很多组中,反之亦然。

我不想制作包含以下列的表格

group_user

id / name / user_id / group_id

由于我只有初级、中级和高级 3 组,我不想为他们制作另一张单独的桌子。我的想法是采用以下方法:

  1. 使用以下数据在同一个表 group_user 中创建 3 条记录

id / name / user_id / group_id

1 / Junior / null / null

2 / 中间 / null / null

3 / Senior / null / null

所以现在当我想插入一个 group_id 时,我将使用我刚刚使用 NULL user_id 和 group_id 创建的这 3 个 ID。

我的记录将如下所示:

id / name / user_id / group_id

4 / NULL / 125 / 1 -> 同表的Junior group的id。

5 / NULL / 125 / 3 -> 同表的Senior group的id。

Is this a valid way to do it? How wrong it is?

【问题讨论】:

  • 为 3 个组的元数据创建一个单独的表,因为您在此处所做的操作包含不适用的空值,这些空值在规范化的关系数据库中是不允许的。 (不适用的NULL是在任何情况下都不能有值的null)
  • 这是有道理的!非常感谢,我会阅读更多关于“Inapplicable NULL”的内容,谢谢。

标签: php laravel migration table-structure


【解决方案1】:

我建议遵循以下正确程序:

表 1 用户表: 编号 |名字

表2组表: 编号 |名字

表 3 group_user 数据透视表: 编号 |用户 ID | group_id

注意:表 3 不应包含可为空的值

关系如下,现在我们有两个模型,一个用户模型和一个组模型。

两者之间将具有belongsToMany 关系。

这是您将在用户模型中使用的方法:

public function groups()
{
    $this->belongsToMany(User::class);
}

这是您将在 Group 模型中使用的方法:

public function users()
{
    $this->belongsToMany(Group::class);
}

这是推荐的继续方式。

【讨论】:

  • 我一定会走这条路的。我在想有一个包含 3 条记录的表是愚蠢的。但更糟糕的是,表中包含非规范化数据的表。非常感谢您的回答和花时间写它:)
  • 不不,你这样想并不愚蠢,我知道这没有多大意义,但你会看到这会在你的应用程序中非常自然地流动。更新我的进展情况。
猜你喜欢
  • 2019-05-22
  • 1970-01-01
  • 2020-02-02
  • 2021-07-13
  • 1970-01-01
  • 2013-10-19
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多