我是数据库设计的新手,从不上课,我在构建数据库和分配主键时遇到了问题。
我有一份城市名单,每个城市有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} }}
答案 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。
这是一个基本的想法,有希望让你开始,无论你是否觉得它有用,我建议你看看我建议的阅读材料,即数据库规范化。