Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 外键可以是sql中的主键_Mysql_Sql_Laravel_Key - Fatal编程技术网

Mysql 外键可以是sql中的主键

Mysql 外键可以是sql中的主键,mysql,sql,laravel,key,Mysql,Sql,Laravel,Key,我正在构建一个应用程序(在Laravel下)。在此应用程序中,希望用户能够共享他们当前的位置。我的sql方案相对简单:我有一个位置表和用户 在我的位置表中,我有一个id、经度、海拔和用户id。用户id是用户表的外键,id是主键 我的问题是:我想为每个用户在我的位置表中插入列(如果位置表中已经有用户的id,则更新高度和经度) 使外键“user_id”同时成为我的位置表中的主键是一个好选项吗?其目的是,如果用户id位于位置表中,则使用“插入或更新”来更新列(以避免在我的表中出现1200000行) 目

我正在构建一个应用程序(在Laravel下)。在此应用程序中,希望用户能够共享他们当前的位置。我的sql方案相对简单:我有一个位置表和用户

在我的位置表中,我有一个id、经度、海拔和用户id。用户id是用户表的外键,id是主键

我的问题是:我想为每个用户在我的位置表中插入列(如果位置表中已经有用户的id,则更新高度和经度)


使外键“user_id”同时成为我的位置表中的主键是一个好选项吗?其目的是,如果用户id位于位置表中,则使用“插入或更新”来更新列(以避免在我的表中出现1200000行)

目标插入或更新

您应该使用位置表的
id
作为主键,并且可以将其他一些字段设置为唯一键。我使用了一个在线生成器来获得下面的表定义

创建表“位置”(
`id`BIGINT unsigned NOT NULL AUTO_INCREMENT,
`用户_id`BIGINT未签名,
`纬度浮动(11.8),
`经度浮动(11.8),
使用BTREE的唯一键“locations\u primary\u KEY”(`id`),
使用BTREE的唯一键'locations\u UNIQUE\u 01'('user\u id','latitude','longitude'),
主键(`id`)
)引擎=InnoDB;
在laravel中,您可以使用
FirstOrNew
FirstOrCreate
插入或更新记录。你能得到的任何帮助。下面是一个方向示例(我现在无法测试代码):

$user\u id=1;
$location=App\location::firstOrCreate(
['user\u id'=>$user\u id],
[“纬度”=>10.12345,“经度”=>9.876]
);

为什么不“吸一口看看”?另外,为了观察,位置通常是由经度和纬度决定的。如果您需要所有用户所在位置的时间线,您应该保留旧记录,如果您只想知道用户现在在哪里,请为每个用户使用一个。