我是数据库设计新手,从未上过相关类(class),我在构建数据库和分配主键方面遇到问题。
我有一个城市列表,每个城市有 5 种公共(public)交通。每个城市的每种公共(public)交通都有不同的票价、主要车站和包含路线协调等的 CSV 文件。然后,我需要根据路线协调(距离)、价格、所需时间等,每天计算每个城市每种公共(public)交通的平均交通成本。
表格城市
:
city (Primary key)
表公共(public)交通
:
city, type of transport, ticket price, main station, file1, file2
表结果
:
city, type of transport, date, cost
我应该如何连接这些表(假设它们的结构是正确的)?在表公共(public)交通
中,我认为城市
应该是外键,但交通类型
将为每个城市重复,所以我不认为它可以是主要的该表的键 - 与表结果
相同。
最佳答案
主要的想法是你不想重复自己。这不仅是一种开销,而且当您希望更改代表同一事物的多个条目时,它很容易出错。
有guidelines上database normalization这可以帮助您确保您的数据采用易于维护和使用的形式。
您不需要成为了解哪种表单做什么的专家,但在数据库设计时必须能够确定哪些内容应该分开。
您应该列出您所知道的内容:
- 不同的城市。
- 不同类型的交通。
- 不同的票价。
- 不同的车站。
如果您为所有这些创建一个单独的表,那么可以很容易地将它们链接到表中的行中,然后在更大范围内表示某些内容。每个条目都应该有一个单独的 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。
这是一个基本思想,希望可以帮助您入门,无论您是否觉得有帮助,那么我建议您看一下我建议的阅读 Material ,即数据库规范化。
关于mysql - 数据库设计结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28837807/