gpt4 book ai didi

mysql - 数据库规范化问题

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:06 24 4
gpt4 key购买 nike

首先,如果这是一个答案显而易见的问题,请允许我提前道歉。我还没有用 Google 搜索解决方案,因为我真的不知道要用 Google 搜索什么。

作为对慈善组织成员 friend 的帮助,我为他建立了一个相当复杂的网站。当我收到该网站的原始规范时,他说他希望该机构发布地区通讯。我已经在数据库中有一个 regions 表,因为组织内的兄弟会必须位于一个区域内。没问题,我很顺利地实现了它。 newsletters 表现在包含一个外键,该外键与 regions 表中的相关 id 相关联。

现在他回来找我说他们也喜欢全国通讯的设施,我不太确定该怎么做。我考虑过将外键列设置为 0 以指示它是全国性的时事通讯,但如果他决定要实现另一种类型的时事通讯,会发生什么情况?我认为这通常是个坏主意。

我考虑过在 newsletters 表中添加一个额外的列,该列将引用另一个表,该表可能包含这些新类型,但这对我来说似乎有点奇怪,而且似乎有点老套。

我考虑过将值复制到另一个表中(包括区域),但我不禁觉得这违反了规范化背后的原则。

我考虑过使用 UNION,这可能行得通,但这意味着两个表必须包含相同的列,这似乎限制太多,而且不是很适合 future 。

我想知道其他人会如何处理这种情况,以及是否有人不得不处理这种情况。我希望我的应用程序尽可能面向 future ,我不想把自己逼到任何角落,但到目前为止,我想到的每个解决方案似乎都有缺点。

如果有人能提供任何帮助,我将不胜感激。

非常感谢。

编辑:

典型!我一发帖就灵光一现,但如果可能的话,我仍然希望得到一些反馈。

newsletters 表不应该有与地区相关的外键,因为它可以在没有地区的情况下存在。我在想每个时事通讯都可以有一个类型列(区域和国家),然后我想有一个数据透视表可以将任何区域时事通讯链接到它们相应的区域。

这对我来说很有意义,但我怀疑我的推理可能有缺陷,所以如果有人愿意的话,我仍然很感激反馈。

非常感谢。

最佳答案

--"The newsletters table now sports a foreign key with correlates to the relevant id in the regions table."--

我建议将时事通讯和地区之间的关系设为多对多(通过映射表)。哪怕现在的现实是一对一或者一对多。映射表将支持当前的现实。它将支持 future 的案例,例如 1 个地区接收多个新闻通讯,或 1 个新闻通讯发送到多个地区。听起来您正在研究实时规范,所以我会寻求灵 active 。


--"they'd also like the facility for a national newsletter"--

“国家”是否定义为所有地区的总和?如果是这样,那么多对多关系可以通过数据支持全国通讯。不需要额外的“IsNational”标志。它可以灵活地制作排除 1 或 2 个地区的“几乎全国性”的时事通讯。行为是通过数据而不是列来控制的。

更新:确保用户界面以方便的方式支持全国新闻通讯。允许他们在 1 个 Action 中轻松地将所有区域标记到时事通讯。

Table: Region
Cols: ID, RegionName, State, etc...

Table: NewsLetter
Cols: ID, NewsLetterName, ect...

Table: Map_Region_NewsLetter
Cols: ID, RegionID, NewsLetterID

关于mysql - 数据库规范化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20334579/

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