代码之家  ›  专栏  ›  技术社区  ›  Zaid

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

  •  3
  • Zaid  · 技术社区  · 15 年前

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


    在OO语言中,我可以创建和扩展 Engine 要获得的超类 PistonEngine RotaryEngine 子类。

    这个 活塞式发动机 子类将包含属性,例如 柱面号 , 活塞孔 活塞击球 .

    这个 转子发动机 子类将包含如下属性: 转子厚度 转子直径 .


    在MySQL中,虽然我可以分别为活塞发动机和旋转发动机创建两个独立的表,但我还是希望维护一个 等动力 字段作为引擎数据的一部分,并将两种引擎类型通用的所有数据存储在一个表中。

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   Ehz    15 年前

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

    一个名为engine types的函数,它只具有用于引擎类型的id/value对。 1旋转 2活塞

    一种被称为引擎的引擎,包含与活塞和旋转引擎相关的信息。它将包含一个包含引擎类型ID的列。

    一个名为RotaryEngineDetails的表,其中包含所有特定于旋转引擎的数据。它会有一把外国钥匙在你的发动机台上。

    一个名为pistonnenginedetails的表,其中包含所有特定于活塞发动机的数据。

        2
  •  1
  •   Irwin M. Fletcher    15 年前

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

    更新 基于评论,我扩展了我的答案。

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

    这是一个 link 关于创建视图的参考。 这里还有一个 link .