这是mySQL架构的良好实践吗?

时间:2015-12-27 11:07:34

标签: mysql database

我是mySQL和数据库的新手。我有一个巴士站和巴士路线的数据集。巴士站可以包含在不同的巴士路线中。是一个好的做法,有一个停止表与每个停止的信息,一个路由表与每个路由信息,然后另一个链接表,以显示哪些巴士站在哪些巴士路线?以下是示例模式:

STOP

  • stop_id(PRIMARY KEY)
  • LAT
  • avg_daily_boarders

ROUTE

  • route_id(PRIMARY KEY)
  • 长度
  • 启动

LINK?

  • entry_id(PRIMARY KEY)
  • stop_id(FOREIGN KEY)REFERENCES停止
  • route_id(FOREIGN KEY)REFERENCES route

1 个答案:

答案 0 :(得分:3)

我想说,了解数据的(数学)结构非常重要。通常有很多方法来表示相同的数据,哪种更好取决于数据库的用途。我会评论你的表格。

您正在公交路线上存储信息。您可以将其视为图形上的路径(数学表示)。有几种方法可以存储此信息。首先,你肯定需要一个带有公交车站(图表的顶点)的表,这样就不会出错。其次,您需要存储路径。这里有两个选项,您可以将它们存储为一系列点或一系列边。订单很重要。你目前没有存储订单,我肯定会建议把它放在某个地方。您还可以选择按边存储路径,即停止对。同样,订单很重要。您为每条路线存储起点和终点,您可以选择这样做,但重要的是要了解这本身并非必要(取决于您的数据库的目的)。

一般建议:明确表示您希望如何在抽象级别上表示数据。

在这里,我的建议与你的桌子相比变化很小:

STOP

  • stop_id(PRIMARY KEY)
  • LAT
  • avg_daily_boarders

ROUTE

  • route_id(PRIMARY KEY)
  • 长度
  • 启动

LINK?

  • entry_id(PRIMARY KEY)
  • stop_id(FOREIGN KEY)REFERENCES停止
  • route_id(FOREIGN KEY)REFERENCES route
  • sequence_nr 使得stop_id是路由route_id上​​的sequence_nr-stop,因此该对(route_id,sequence_nr)必须是唯一的