gpt4 book ai didi

mysql - 用于存储地点属性的数据库结构

转载 作者:搜寻专家 更新时间:2023-10-30 20:58:12 25 4
gpt4 key购买 nike

我必须存储有关学校和大学的数据(还计划了更多实体,如语言类(class))。

我必须存储的数据列表:

  • 可用的学习计划
  • 住宿可能性
  • 特殊饮食的可用性
  • 等等

所以我为学校和大学创建了表格:

Place (place_id, name, city_id ... )
School (place_id (FK), school_type ...)
University (place_id (FK), ... )

选项表:

Accomodation (accomodation_id, name, description ...)
Activity (activity_id, name, category ...)
...

而且因为它总是有可能不止一个选项,所以我用这样的表格将它们绑定(bind)在一起:

Accomodation_to_place (place_id, accomodation_id)
...

但我发现更新甚至从这整件事中获取数据真的很难。我必须进行 14 次连接和 7 次 GROUP_CONCAT() 才能获得我需要的所有信息。

所以我认为我的数据库设计中一定存在一些严重的缺陷。我想询问如何让它变得更好/更容易的任何想法。

最佳答案

数据库规范化的目标主要是避免以冗余和易受数据异常影响的方式存储数据。

它有时会导致检索所有数据的复杂查询,但那是因为您正在建模的信息的性质很复杂。尽管如此,为了避免数据变得一团糟,规范化设计更好。

我建议,如果您有包含大量 DISTINCT 和 GROUP_CONCAT 的复杂查询,您可能试图在单个查询中获取太多信息。使用两个或三个查询不一定有害,通过使代码更易于阅读、维护和调试,您可能会受益匪浅。

我在我的书 SQL Antipatterns Volume 1: Avoiding the Pitfalls of Database Programming 中标题为“意大利面条查询”的章节中写到了这个问题。

关于mysql - 用于存储地点属性的数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13632584/

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