mysql - 数据库设计结构

标签 mysql database

我是数据库设计新手,从未上过相关类(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)交通中,我认为城市应该是外键,但交通类型将为每个城市重复,所以我不认为它可以是主要的该表的键 - 与表结果相同。

最佳答案

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

guidelinesdatabase 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/

相关文章:

php - 使用 {{ }} 时的 Laravel 5.6 htmlspecialchars

php - MYSQL 数学运算优先级

php - Symfony2 + 存储过程 ||如何获取结果?

php - 带有 php 的 Xampp 未运行

mysql - 如何在 SQL 中的特定列中获取中间值

Mysql 还是其他?

php - 在mysql中本地和在线运行相同的数据库

database - Oracle 中表行的创建日期时间是多少?

python - 图像的光谱哈希与汉明距离匹配

database - 在 Yesod 脚手架站点初始化 SQLite 数据库