数据建模。如何建模数百个依赖字段,1:n或作为一个表?

时间:2015-05-28 07:47:35

标签: mysql database database-design relational-database data-modeling

我必须存放具有渐进累计运行成本的租赁汽车,例如:

主要数据:

Id:    123  
Model: Ford Transit
yom:   2013

毕业变量运行成本:

kilometers/year utilities  tires service misc
        10,000        80     400      50   30
        12,000       100     400      55   35
        14,000       120     400      60   40
          ...
       100,000       500   1,500     150  100

因此,对于2,000和4种不同的成本类型,以10,000到100,000的步长,这导致50 x 4 = 200个数据字段。

将它建模为1:n关系或者我的汽车表(MySql)中有超过200列可以更好吗?有什么优点和缺点?

如果是1:n,每当输入新的汽车记录时,触发器是否可以在变量成本表中创建200个字段?

提前感谢任何提示

2 个答案:

答案 0 :(得分:2)

  

因此,对于2,000和4种不同的成本类型,分为10,000到100,000,这导致50 x 4 = 200个数据字段。

是。当它是标准化时,每个记录的200个字段将转换为每个标准化行4列。

  

将它建模为1:n关系是否更好?或者我的汽车表(MySql)中有超过200列可以吗?

好吧,如果您正在考虑关系 是1 :: n关系。

在数据库中实现非规范化记录(例如,在您的情况下,200个字段之一)是绝对不可接受的。

  

存在哪些利弊?

我不能在这里给出一个教程,但一般来说,规范化的行有(a)关系完整性,(b)关系能力[你会注意到以连接减少的形式],(c)关系速度(d)易于扩展[添加/更改数据库],以及(e)编码的简易性。没有哪个非标准化记录提供,它们提供相反的结果。

  

如果是1:n,只要输入新的汽车记录,触发器是否可以在变量成本表中创建200个字段?

通常,关系数据库中不需要触发器。只有在需要做奇怪的事情时才需要它们,并且奇怪的事情是归一化数据的结果。

在您的情况下,添加新车的200个值是未知的,因此触发器无论如何都不会起作用。

不,在ACID交易中,当用户添加新车并且每公里步骤填充四列时,请正确执行。您可能有4个默认值自动填充屏幕上的字段,但在用户点击“添加”按钮之前,不应将其保存到数据库中。

数据模型

以下是您需要的数据模型。

  • Vehicle Maintenance Data Model

  • 我已对数据进行了规范化,但没有说明步骤或过程,这是最终结果。

    • EG。 Ford Transit不是Atomic,我通过分隔ManufacturerModel.
    • 将其设为Atomic
  • 强制性/可选费用:

    • 如果每个MaintenanceKilometre步骤)行显示四个费用字段,则需要右侧的模型

    • 如果任何费用字段是可选的,则需要左侧的模型。我认为服务是强制性的,即。它发生在每公里进入。

  • 我已经为您提供了关系密钥,从而为您提供了关系完整性。如果您不使用复合键,您将失去完整性。例如:

    • Model(例如Transit)不是独立存在的,它仅存在于Manufacturer的上下文中(例如Ford)。< / p>

    • ModelYear(例如2013)不是独立存在的,它仅存在于Model的上下文中(例如Ford Transit)。< / p>

    • 如果您认为名称代码过宽,则可以替换名称代码。

  • The Maintenance表需要一个简单的CHECK约束,以确保Kilometre步骤为模2000.

这是一款IDEF1X型号。 IDEF1X是关系数据库建模的标准。请注意每一个小嘀嗒声;缺口;并标记;乌鸦脚;实线与虚线;广场与圆角;意味着非常具体和重要的东西。请参阅IDEF1X Notation。如果您不理解符号,您将无法理解或工作模型。

记录ID

请注意,现在很多人都不了解如何根据 Relational Model 的要求创建具有唯一行的Relational表。它们创建文件,通常每个都有一个记录ID,并允许大量重复。请阅读this Answer,从顶部到假教师。并尝试其中给出和链接的代码。

警告

  

佐哈鲁:
  我还建议一个汽车模型的查找表,以便cars表中的每一行都有一个模型ID而不是模型名称。

这种建议来自那些阅读了假教师的书籍,并且应用它并提供建议但没有任何实际知识或经验的人。它让每个人都陷入了1970年以前的ISAM记录文件系统,同时认为他们有一个关系数据库&#34;。

他们根本不知道他们缺少的关系完整性,权力和速度。如果有人提出问题,我会提供答案。不在这里,这个答案已经完成。

答案 1 :(得分:-1)

您可以使用具有预先填充的查找表(右侧)的数据模型。然后将该维护应用于实际车辆(左侧) ERD