sql >> Databáze >  >> RDS >> Mysql

MySQL – vztah jeden k jednomu?

Ne, to dělá vztah "jedna k nule nebo jedna". Opravdu to potřebujete?

Pokud ano , pak je vaše „druhé řešení“ lepší:

  • je to jednodušší
  • zabere méně místa (a proto je mezipaměť "větší")
  • je třeba udržovat méně indexů, což prospívá manipulaci s daty
  • a (protože používáte InnoDB) přirozeně shluky data, takže uživatelé, kteří jsou blízko u sebe, budou mít své účty také uloženy blízko sebe, což může být přínosem pro umístění mezipaměti a určité druhy skenování rozsahu.

BTW, budete muset vytvořit accounts.id obyčejné celé číslo (ne automatický přírůstek), aby to fungovalo.

Pokud ne , viz níže...

„Nejlepší“ je přetížené slovo, ale „standardní“ řešení by bylo stejné jako v jakékoli jiné databázi:vložte obě entity (ve vašem případě uživatele a účet) do stejné fyzické tabulky.

Teoreticky byste mohli vytvořit kruhové FK mezi dvěma PK, ale to by vyžadovalo odložené omezení k vyřešení problému s kuřecím masem a vejci, která bohužel nejsou podporována pod MySQL.

Nemám mnoho praktických zkušeností s tímto konkrétním modelovacím nástrojem, ale hádám, že je to proto, že je to „jedna k mnoha“, kde byla strana „mnoho“ omezena na 1, čímž byla jedinečná. Pamatujte prosím, že „mnoho“ neznamená „1 nebo mnoho“, znamená „0 nebo mnoho“, takže „limitovaná“ verze skutečně znamená „0 nebo 1“.

Nejen ve výdajích na úložiště pro další pole, ale také pro sekundární index. A protože používáte InnoDB, který vždy shlukuje tabulky , mějte na paměti, že sekundární indexy jsou v klastrových tabulkách ještě dražší než v tabulkách založených na haldě.

InnoDB vyžaduje indexy na cizí klíče.



  1. Klauzule Go a IN v Postgresu

  2. laravel výmluvný seřadit podle vztahu

  3. Odesílejte e-maily s přílohami v Oracle D2k, Oracle Forms 10g, Oracle Forms 6i

  4. 4 Funkce, které extrahují mikrosekundy z časové hodnoty v MariaDB