mysql - 用于数据库设计的抽象/超/子类结构

标签 mysql database structure

在这件事上我已经把头撞到墙上好几次了。所以我希望在正确的方向上得到一点帮助。

我有一张 table ,上面有订单,一张 table 上有火车,一张 table 上有航类,一张 table 上有巴士。每个订单应该有单一的运输方式。到目前为止,我的设计由 ORDERS 表中的一个字段组成,该字段说明交通类型(火车、航类、公共(public)汽车),以及一个包含所述交通类型的外键的字段。

有没有更好的方法来做到这一点?

最佳答案

我在 Craig Larman 的书《应用 UML 和模式》中看到过对此主题的最好描述 - 尽管他是从面向对象的角度而不是数据库的角度进行写作的。

关系世界中有 3 种选择(这是基于 Larman 的书):

  • 每个变体的子类型。因此,您创建一个“order_flight”表 航空公司、座位选择等,以及带有 from_station 的“order_train”, to_station 等。这使表格保持良好且具有 self 描述性,但是 让你的 SQL 变得一团糟 - 它必须针对每个子类型进行更改。
  • 包含所有可能列的单个表:在这种情况下,您有一个包含所有子类型的所有可能字段的单个表。这边走, 你的 SQL 仍然简单得多 - 但表变得一团糟,并且
    您依靠您的客户端应用程序来“了解”航类
    航空公司有,但火车没有。
  • 通用属性表,子类型将其唯一值存储在自己的表中。这基本上就是你所选择的 日期;该关系可以在“order”表中设置,也可以在 子类表。

每个选项都有优点和缺点 - 特别是在您事先不知道需要哪些子类型的情况下,第一个选项在数据库端是最简单的,但会造成一些困惑客户端代码。

关于mysql - 用于数据库设计的抽象/超/子类结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8241286/

相关文章:

php - 尝试将产品从 php session 链接到订单(id)

mysql - 比较两个表并将结果存储在第三个表中

php - 压缩多个数据库 PDF blob 文件

java - 限制 SQL 数据库中的条目

sql - 摆脱 STI - SQL 将单个表分解为新的多表结构

mysql - 在 MySQL 中重新创建 UNI 和 MUL 索引

c++ - 结构成员的文件输入示例?

c - 我的 readFile 中出现段错误

c - 带结构的 C 中的链表实现

php - 一个复杂的mysql连接