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

Implementace asociačních tabulek

Vztah mezi Locations a Events je příkladem vztahu 1-to-many. To znamená, že s každým jednotlivým místem může být spojeno mnoho událostí. Tyto typy vztahů se obvykle implementují přidáním cizího klíče do tabulky „many“ (událostí), který odkazuje na primární klíč tabulky „one“ (umístění).

Vztah mezi 'Locations' a 'Typy' je příkladem vztahu mnoho k mnoha. To znamená, že umístění může mít mnoho typů a jeden typ může souviset s mnoha umístěními. Tyto typy vztahů jsou obvykle implementovány pomocí tabulky odkazů, která obsahuje cizí klíče pro související řádky. Tabulka odkazů má obvykle složený primární klíč ze dvou cizích klíčů, což znamená, že jedno umístění nelze propojit s typem „bar“ dvakrát.

Proto by pro vás mohly být vhodné následující struktury tabulek:

Location: ID (primary key), LocationName, ...
Events: ID (primary key), LocationID (foreign key), Date, Name, ...
LocationTypes: LocationID (fk), TypeID (fk)
Types: ID (pk), Name, ...

Chcete-li se dotazovat na informace v několika tabulkách, musíte použít spojení. Pro vztah 1-to-many bude fungovat následující dotaz:

SELECT
    l.LocationName, e.Name, e.Date
FROM Location l
    JOIN Events e ON l.ID = e.LocationID

Pro vztah many-to-many následující dotaz spojí informace dohromady.

SELECT
    l.LocationName, t.Name as TypeName
FROM Location l
    JOIN LocationTypes lt ON l.ID = lt.LocationID
    JOIN Types t ON lt.TypeID = t.ID

Tyto příklady pouze ukazují standardní vnitřní spojení, existují další typy spojení, které mohou lépe vyhovovat vašim potřebám.



  1. Dynamický oddíl tabulky Oracle

  2. Co by mohlo způsobit, že čtení mysql db vrátí zastaralá data

  3. PostgreSQL:platný vzorek přiřazení proměnné?

  4. regex v SQL k detekci jedné nebo více číslic