gpt4 book ai didi

mysql - 实现关联表

转载 作者:行者123 更新时间:2023-11-29 06:15:44 25 4
gpt4 key购买 nike

我想知道是否有人可以帮助我以您认为正确的方式组织我的 MySQL 表(我在某处读到关联表就是我正在寻找的)。我在实现它们时遇到了困难。

这是一个例子:

Location            Type                 Event                   Date
Location 1 bar, disco event1 friday
Location 1 bar, disco event2 saturday
Location 2 bar, restaurant Event3 friday

如果您只想在数据库中保留“位置 1”一次,并将与其关联的事件存储在其他地方,您会如何处理?这同样适用于类型部分。我无法决定如何为一个位置设置多个变量,例如酒吧也是餐厅等......

最佳答案

位置事件 之间的关系是一对多关系的示例。这意味着每个单独的位置都可以有许多与之相关的事件。这些类型的关系通常通过向“多”表(事件)添加外键来实现,该外键引用“一个”表(位置)的主键。

“位置”和“类型”之间的关系是多对多关系的示例。这意味着一个位置可以有多种类型,并且一个类型可以与许多位置相关。这些类型的关系通常使用链接表来实现,其中包含相关行的外键。链接表通常有一个由两个外键组成的复合主键,这意味着一个位置不能两次链接到 'bar' 类型。

因此,以下表结构可能适合您:

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

要跨多个表查询信息,您必须使用联接。对于一对多关系,以下查询将起作用:

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

对于多对多关系,以下查询会将信息连接在一起。

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

这些示例仅显示标准内部联接,还有其他联接类型可能更适合您的需求。

关于mysql - 实现关联表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6700165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com