数据库设计结构

时间:2015-03-03 17:10:51

标签: mysql database

我是数据库设计的新手,从不上课,我在构建数据库和分配主键时遇到了问题。

我有一份城市名单,每个城市有5种类型的公共交通工具。每种类型的公共交通工具在每个城市都有不同的票价,主站和CSV文件以及路线协调等。然后我需要每天根据路线协调(距离),价格,花费的时间等计算每种城市公共交通的平均运输成本等。

cities

city (Primary key)

public transport

city, type of transport, ticket price, main station, file1, file2

results

city, type of transport, date, cost

我应该如何连接这些表(假设它们的结构是正确的)?在表public transport中,我认为city应该是外键,但type of transport将重复每个城市,因此我认为它不能成为此表的主键 - 表{{1} }}

1 个答案:

答案 0 :(得分:0)

主要的想法是你不想重复自我。当您希望更改代表相同内容的多个条目时,它不仅是一种开销,而且非常容易出错。

guidelines上有database normalization,可帮助您确保您的数据位于易于维护和使用的表单上。

在数据库设计方面,您不需要成为了解哪种形式可以做什么,但能够确定应该分开哪些形式的专家。

你应该列出你所知道的内容:

  • 不同的城市。
  • 不同类型的运输。
  • 票价不同。
  • 不同的电台。

如果为所有这些创建一个单独的表,那么它很容易在表中的行中将它们链接在一起,然后表示更大规模的内容。每个条目都应该有一个单独的ID作为您的主键,您需要能够允许例如具有相同名称的多个城市,因此如果它们是主键,则无法保留唯一值。

E.g。现在很容易识别城市的路线,城市中可以有多条路线

route_id | city_id | route_name
 1          2         test1
 2          2         test2

然后,您可以添加另一个表,表示哪种传输与此特定路径绑定。

route_id | transport_id
 1          3  
 2          4

然后,您可以创建一个新表格,其中包含作为路线一部分的电台点,您甚至可以确定它是否是主要路线。

route_connected_id | route_id | station_id | main_route
 1                    1          2            1        // a main route
 2                    1          3            0        // not a main route

它一直在继续,分离最简单的条目允许您创建复杂的关系,您只需要链接ID。

这是一个基本的想法,有希望让你开始,无论你是否觉得它有用,我建议你看看我建议的阅读材料,即数据库规范化。