Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwendung einer UUID als Primärschlüssel mit Laravel 5

Wie wäre es mit dieser Idee zum Speichern einer 36-chr-UUID als Binary(16) :

IMO gibt es einen Vorteil darin, dass Laravel die UUID nicht generiert . Wenn nämlich (irgendwann in der Zukunft) neue Datensätze von außerhalb der Anwendung in die Datenbank eingefügt werden, wird das UUID-Feld ordnungsgemäß ausgefüllt.

Mein Vorschlag:Erstellen Sie einen UUID-Standardwert-Trigger mithilfe von Migrationen

(Dieser Trigger lässt den Datenbankserver die Arbeit erledigen, um die UUID jedes Mal zu generieren, wenn ein neuer Kunde eingefügt wird)

<?php namespace MegaBank\HighInterestLoans\Updates;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;

class MigrationTriggerForCustomers extends Migration
{
public function up()
    {
    
        DB::unprepared('CREATE TRIGGER before_insert_customers
                      BEFORE INSERT ON    
                    `megabank_highinterestloans_customers` 
                      FOR EACH ROW
                      SET new.uuid = UNHEX(REPLACE(UUID(), "-","");');
    }

    public function down()
    {
        DB::unprepared('DROP TRIGGER `before_insert_customers`');
    }
}

Wenn Sie schließlich eine für Menschen lesbare Version Ihrer UUID erhalten möchten, gehen Sie einfach wie folgt vor:

SELECT HEX(UUID) FROM customers;

Wie auch immer, hoffe das hilft jemandem :-)