DB结构用于存储场所的属性

时间:2012-11-29 18:46:21

标签: mysql sql database database-design

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

我必须存储的数据列表:

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

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

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 ...)
...

因为它总是可能不止一个选项,所以我将它们与这样的表绑定在一起:

Accomodation_to_place (place_id, accomodation_id)
...

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

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

1 个答案:

答案 0 :(得分:0)

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

有时会导致复杂的查询以检索所有数据,但这是因为您建模的信息的性质很复杂。尽管如此,规范化设计可以更好地避免数据变得混乱。

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

我在我的书SQL Antipatterns: Avoiding the Pitfalls of Database Programming

中标题为“意大利面条查询”的章节中写过这个问题。