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

Mnoho k mnoha na stejném stole

Pokud je vztah, který popisujete, symetrický, jako v případě „Bob je přítel Joe“ znamená „Joe je také přítel Boba“, pak se můžete ve svém kódu ujistit, že menší ze 2 ID uživatelů bude první sloupec a větší jde do druhého sloupce. Toto omezení do značné míry zajišťuje, že záznamy ve vaší vyhledávací tabulce budou jedinečné. To také znamená, že když provádíte vyhledávání, obvykle musíte prohledávat oba sloupce.

Pokud byste se například snažili získat všechny Bobovy přátele, museli byste se dotazovat na záznamy, které mají Bobovo ID v obou sloupcích. To vede k o něco více kódu a možná i dopadu na výkon.

Pokud může být vztah asymetrický, jako v „Bob je přítel Joe“ nemusí nutně znamenat „Joe je také přítel Boba“, pak potřebujete 2 položky pro každou dvojici uživatelů:Bob – Joe a Joe – Bob. To znamená, že vaše vyhledávací tabulka bude obsahovat dvakrát tolik položek a také, že váš web je velmi vhodný pro stalkery :D Samozřejmě se stále můžete rozhodnout použít tento systém, i když je váš vztah symetrický.

Pomocí této metody, pokud chcete získat všechny Bobovy přátele, stačí vybrat záznamy s Bobovým ID v prvním sloupci. Je možné, že to může znamenat rychlejší vyhledávání a méně kódu pro psaní, ale opět to znamená, že zabíráte více místa ve vaší databázi.



  1. CHYBA Postgresu:nelze otevřít soubor pro čtení:Povolení odepřeno

  2. Přesný význam klauzule Cizí klíč MySQL 'on deletestrict'

  3. Konvence pojmenování MySQL, měl by název pole obsahovat název tabulky?

  4. Blob a požadavek na úložiště