gpt4 book ai didi

mysql - 在另一个多对多表中引用多对多表中的行是个坏主意吗

转载 作者:行者123 更新时间:2023-11-29 05:32:43 25 4
gpt4 key购买 nike

如果我有类似这样的架构:

TABLE 1  
id
column
other_column
etc

TABLE 2
id
table1_id
some_other_table_id

像这样添加第三个表是个好主意吗:

TABLE 3  
id
table2_id
row_from_another_table_id

编辑:
为了使事情更清楚,请考虑这样的模式:

EVENTS  
id
name
other_stuff

RANGES
id
time_from
time_to
max_people
etc

EVENTS_PLACES
id
event_id
place_id

我想做的是为一个事件定义一个时间范围。但是特定地点的特定事件 (EVENTS_PLACES) 可以“覆盖”此范围。一个事件也可以有多个范围。

我希望这能让问题更清楚一些。

最佳答案

我的印象一直是多对多关系是一种违规行为Boyce-Codd Normal Form因此违反了良好的关系数据库模式。

因此,实际上,将数据关联到链接表对于实现 BCNF 是必要的,因此是好的。如果避免数据更新异常就好了。


关于您提供的特定架构示例。我想你想要这些逻辑表(或实体),

-----------------------
EventClass
-----------------------
Id
Name
... Other attributes common to every instance
-
-----------------------
TimeSlot
-----------------------
Id
Start
End
-
-----------------------
Place
-----------------------
Id
Name
Address
MaxAttendance
... etc
-
----------------------
EventInstance
-----------------------
Id
EventClassId
TimeSlotId
PlaceId
PresenterName
...Other attributes specific to the instance

EventInstanceEventClassTimeSlotPlace 之间的关系,任何特定于 的属性EventInstance 应存储在该实体上。相关事件组共有的任何属性都应存储在 EventClass 属性中。


都是Database Normalization的问题,一般来说,数据越规范化越好。然而,当性能受到关注时,存在折衷的情况,如果所需数据以输出格式存储,它确实会使选择查询更简单和更快,尽管更新可能很糟糕。

我建议通过正确的 Indecies,Materialized Views 来抵消妥协的理由。以及 Materialized Views 上的索引,您可以两全其美。完全规范化数据的可维护性和性能速度。不过,要使架构正确,确实需要一些技巧和考虑。

关于mysql - 在另一个多对多表中引用多对多表中的行是个坏主意吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13374971/

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