抽象概念与MySQL中的表相关吗?如果是,我怎么做?

抽象概念与MySQL中的表相关吗?如果是,我怎么做?,mysql,oop,abstraction,Mysql,Oop,Abstraction,我想在MySQL数据库中存储各种引擎的数据,该数据库包括活塞引擎和旋转引擎 在OO语言中,我可以创建并扩展引擎超类,以获得PistonEngine和RotaryEngine子类 PistonEngine子类将包含CylinderNo、PistonBore和PistonStroke等属性 RotaryEngine子类将包含转子厚度和转子直径等属性 在MySQL中,虽然我可以分别为活塞式引擎和旋转式引擎创建两个单独的表,但我更愿意维护一个EngineType字段作为引擎数据的一部分,并将两种引擎

我想在MySQL数据库中存储各种引擎的数据,该数据库包括活塞引擎和旋转引擎


在OO语言中,我可以创建并扩展
引擎
超类,以获得
PistonEngine
RotaryEngine
子类

PistonEngine
子类将包含CylinderNo、PistonBore和PistonStroke等属性

RotaryEngine
子类将包含转子厚度和转子直径等属性


在MySQL中,虽然我可以分别为活塞式引擎和旋转式引擎创建两个单独的表,但我更愿意维护一个EngineType字段作为引擎数据的一部分,并将两种引擎类型共有的所有数据存储在一个表中


如何设计数据库以尽可能避免数据冗余?

我的建议是创建一个表,其中包含两种引擎类型所需的所有信息,包括引擎类型本身的键。之后,您可以为每种类型的引擎“类”创建一个视图,使其看起来像自己的对象。虽然,根据您存储的所有数据,它可能不会产生任何影响,因为您的结构不会被规范化

更新 根据评论,我扩大了我的答案

根据定义,视图是由SELECT查询的结果集组成的虚拟表或逻辑表。因为视图类似于由行和列组成的表,所以您可以用与表相同的方式检索和更新其中的数据。视图是动态的,因此它与物理模式无关,并且只存储为视图定义。当作为视图源数据的表发生更改时;视图中的数据也会更改。()

以下是有关创建视图的参考。
这里还有一个。

在这种情况下,我将创建四个表

其中一个名为EngineTypes,它只包含引擎类型的id/值对 1扶轮社 2活塞

其中一种称为发动机,包含与活塞式发动机和旋转式发动机相关的信息。它将有一列包含引擎类型id

一个名为RotaryEngineDetails的表,其中包含所有特定于旋转引擎的数据。它将有一个外键指向引擎表


一个名为PistonEngineDetails的表格包含所有活塞发动机特定数据。

您能否澄清“视图”的含义?视图是一个表格或一组表格的可自定义界面。我想我现在明白了。但是使用一个表会导致出现多个
null
值……这是真的,但是如果您仅通过视图访问这些表,则不会注意到它们。有空值会有什么问题?@lansinwd:不,我只关心内存,仅此而已。是的,它会映射到一个枚举,您可以在其中显式地将值设置为EngineTypes表中的ID。@OG:我非常喜欢您的表设计建议。它又瘦又优雅!