A relação entre
Locations
e Events
é um exemplo de um relacionamento de 1 para muitos. Isso significa que cada local individual pode ter muitos eventos associados a ele. Esses tipos de relacionamentos geralmente são implementados adicionando uma chave estrangeira à tabela 'muitos' (eventos) que faz referência à chave primária da tabela 'uma' (locais). A relação entre 'Locais' e 'Tipos' é um exemplo de uma relação muitos-para-muitos. Isso significa que um local pode ter muitos tipos e um tipo pode estar relacionado a muitos locais. Esses tipos de relacionamentos geralmente são implementados com uma tabela de links, que contém chaves estrangeiras para as linhas relacionadas. A tabela de links geralmente tem uma chave primária composta das duas chaves estrangeiras, o que significa que um local não pode ser vinculado ao tipo 'bar' duas vezes.
Portanto, as seguintes estruturas de tabela podem ser adequadas para você:
Location: ID (primary key), LocationName, ...
Events: ID (primary key), LocationID (foreign key), Date, Name, ...
LocationTypes: LocationID (fk), TypeID (fk)
Types: ID (pk), Name, ...
Para consultar as informações em várias tabelas, você precisa usar junções. Para o relacionamento de 1 para muitos, a consulta a seguir funcionará:
SELECT
l.LocationName, e.Name, e.Date
FROM Location l
JOIN Events e ON l.ID = e.LocationID
Para um relacionamento muitos-para-muitos, a consulta a seguir reunirá as informações.
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
Esses exemplos mostram apenas uma junção interna padrão, existem outros tipos de junção que podem atender melhor às suas necessidades.