为了账号安全,请及时绑定邮箱和手机立即绑定

在二对多关系上使用两个表或将三个表与数据透视表一起使用

在二对多关系上使用两个表或将三个表与数据透视表一起使用

PHP
浮云间 2022-05-27 15:02:42
基本上,我的数据库中有 2 个表:Games 和 Teams。每场比赛必须有 2 支球队,所以这是一个二对多的关系。我应该在我的 Games 表中使用 2 个外键指向 Teams 表中的 2 个团队并具有一对多关系,还是使用与第三个表的多对多关系来链接游戏和团队表?我在项目中使用 Laravel 6.5,所以我猜我使用 Eloquent 来实现它。Schema::create('games', function (Blueprint $table) {            $table->bigIncrements('id');            $table->unsignedBigInteger('team_a_id');            $table->foreign('team_a_id')->references('id')->on('teams')->onDelete('restrict');            $table->unsignedBigInteger('team_b_id');            $table->foreign('team_b_id')->references('id')->on('teams')->onDelete('restrict');            $table->unsignedInteger('team_a_score');            $table->unsignedInteger('team_b_score');            $table->string('status');            $table->boolean('finished');        });Schema::create('teams', function (Blueprint $table) {            $table->bigIncrements('id');            $table->string('name');            $table->string('abbreviation');            $table->string('country');            $table->timestamps();        });这是我现在创建的两个表,这是实现它的正确方法吗?
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

使用多对多关系。在这种情况下,游戏模式可能有多个团队,反之亦然。


因此迁移将是这样的:


  Schema::create('games', function (Blueprint $table) {

        $table->bigIncrements('id');

        $table->string('status');

        $table->boolean('finished');

  });


  Schema::create('teams', function (Blueprint $table) {

        $table->bigIncrements('id');

        $table->string('name');

        $table->string('abbreviation');

        $table->string('country');

        $table->timestamps();

  });


  Schema::create('game_team', function (Blueprint $table) {

        $table->bigIncrements('id');

        $table->integer('game_id');

        $table->integer('team_id');

        $table->unsignedInteger('score');

        $table->timestamps();

  });


查看完整回答
反对 回复 2022-05-27
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信