Mysql 数据库设计结构

Mysql 数据库设计结构,mysql,database,Mysql,Database,我是数据库设计新手,从未上过这门课,我在构建数据库和分配主键方面有问题 我有一个城市列表,每个城市有5种公共交通。每种类型的公共交通在每个城市都有不同的票价、主站和CSV文件以及路线协调等。然后,我需要根据路线协调(距离)、价格、所需时间等,每天计算每个城市每种公共交通类型的平均交通成本 表城市: city (Primary key) 表公共交通: city, type of transport, ticket price, main station, file1, file2 表结果: c

我是数据库设计新手,从未上过这门课,我在构建数据库和分配主键方面有问题

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

城市

city (Primary key)
公共交通

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

city, type of transport, date, cost

我应该如何连接这些表(假设它们的结构正确)?在表
公共交通
中,我认为
城市
应该是外键,但
交通类型
将在每个城市重复,因此我认为它不能成为此表的主键-表
结果

的主键相同。主要的想法是,您不希望重复自己。这不仅是一项开销,而且当您希望更改表示同一事物的多个条目时,也很容易出错

有多种方法可以帮助您确保数据的格式易于维护和使用

您不需要成为了解哪种形式起什么作用的专家,但在数据库设计方面,必须能够识别哪些形式应保持分离

你应该列出你所知道的:

  • 不同的城市
  • 不同类型的交通工具
  • 不同的票价
  • 不同的电台
如果为所有这些对象创建一个单独的表,那么很容易将它们按行链接在一个表中,然后在更大的范围内表示某个对象。每个条目都应该有一个单独的id作为主键,您需要能够允许(例如)多个城市使用相同的名称,因此如果它们要作为主键,则不能保留唯一的值

例如,现在很容易确定一个城市的路线,一个城市可以有多条路线

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


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

哦,我没有这样看,它是有实际意义的。谢谢。@John,不客气。如果您满意地将答案标记为已接受,请随意勾选答案旁边的复选标记。如果您希望等待更好的答案,您可以再等一段时间,但我不会指望它。