簡體   English   中英

外鍵可以是 sql 中的主鍵

[英]A foreign key can be primary in sql

我正在構建一個應用程序(在 Laravel 下)。 在此應用程序中,希望用戶可以共享他們當前的位置。 我的 sql 方案比較簡單:我有一個位置表和用戶。

在我的位置表中,我有一個 id、經度、高度和 user_id。 用戶 id 是用戶表的外鍵,id 是主鍵。

我的問題是:我想為每個用戶在我的位置表中插入列(如果 user_id 已經在位置表中,則更新高度和經度)。

將外鍵“user_id”作為我的位置表中的主鍵是一個不錯的選擇嗎? 目的是如果用戶 ID 在位置表中,則使用“插入或更新”更新列(以避免我的表中有 1200000 行)。

瞄准插入或更新

您應該使用位置表的id作為主鍵,您可以將其他一些字段設置為唯一鍵。 我使用在線生成器來獲取下表定義。

CREATE TABLE `locations` (
    `id` BIGINT unsigned NOT NULL AUTO_INCREMENT,
    `user_id` BIGINT unsigned,
    `latitude` FLOAT(11.8),
    `longitude` FLOAT(11.8),
    UNIQUE KEY `locations_primary_key` (`id`) USING BTREE,
    UNIQUE KEY `locations_unique_01` (`user_id`,`latitude`,`longitude`) USING BTREE,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB;

在 laravel 中,您可以使用FirstOrNewFirstOrCreate插入或更新您的記錄。 您可以在此處的 laravel 文檔中獲得任何幫助。 這是一個僅用於定向的示例(我現在無法測試代碼):

$user_id = 1;
$location = App\Location::firstOrCreate(
    ['user_id' => $user_id],
    ['latitude' => 10.12345, 'longitude' => 9.876]
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM