sql >> Databasteknik >  >> RDS >> Mysql

Implementering av föreningstabeller

Förhållandet mellan Locations och Events är ett exempel på en 1-till-många-relation. Detta innebär att varje enskild plats kan ha många händelser kopplade till sig. Dessa typer av relationer implementeras vanligtvis genom att lägga till en främmande nyckel till tabellen "många" (händelser) som refererar till primärnyckeln för tabellen "en" (platser).

Relationen mellan "Platser" och "Typer" är ett exempel på ett många-till-många-förhållande. Det betyder att en plats kan ha många typer och en typ kan relateras till många platser. Dessa typer av relationer implementeras vanligtvis med en länktabell, som innehåller främmande nycklar för de relaterade raderna. Länktabellen har vanligtvis en sammansatt primärnyckel av de två främmande nycklarna, vilket innebär att en plats inte kan länkas till typen "bar" två gånger.

Så följande tabellstrukturer kan vara lämpliga för dig:

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

För att fråga efter informationen i flera av tabellerna måste du använda joins. För 1-till-många-relationen kommer följande fråga att fungera:

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

För en många-till-många-relation kommer följande fråga att sammanfoga informationen.

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

Dessa exempel visar bara en standard inre koppling, det finns andra kopplingstyper som kanske passar dina behov bättre.



  1. Rails-appfel - ActiveRecord::PendingMigrationError Migrering väntar; kör 'rake db:migrate RAILS_ENV=development' för att lösa det här problemet

  2. Vilka är skillnaderna mellan mysql-connector-python, mysql-connector-python-rf och mysql-connector-repackaged?

  3. Kör MySQL lagrad procedur med kommandoraden

  4. SQL IN Klausul 1000 objektgräns