7

我为不同的 OEM 设计了一些车辆识别码 (VIN)解码器。关于 VIN 号码的事情......尽管有些标准化,但每个 OEM 都可以重载字符位置代码并以不同方式对待它们,添加“额外”元数据(即星号指向 VIN 号码之外的更多数据)等等。尽管如此所有这一切,我已经能够构建几个不同的 OEM VIN 解码器,现在我正在尝试构建一个 GM VIN 解码器,这让我很头疼。

问题的要点是,GM 对车辆属性部分(位置 4、5、6、7)的处理方式不同,具体取决于它是卡车还是汽车。这是细分:

通用乘用车VIN故障

通用汽车VIN

通用卡车 VIN 故障

通用卡车 VIN

通常我所做的是设计自己的粗略ETL流程,将数据导入 RDMBS - 每个表都与主要的 VIN 故障大致相关。例如,将有一个 WMI 表、EngineType 表、ModelYear 表、AssemblyPlant 表等。然后我构建一个视图,该视图连接一些上下文数据,这些数据可能直接从 VIN 号本身的字符代码中收集(例如某些车辆类型仅具有某些车辆发动机)。

要查找 VIN,只需使用 VIN 字符串的每个主要字符代码位置细分查询 VIEW。例如,1FAFP53UX4A162757的示例 VIN在不同 OEM 的 VIN 结构中分解如下:

| 管理信息系统 | 克制 | LineSeriesBody | 引擎 | 校验码 | 年份 | 工厂 | 序列 |
| 123 | 4 | 第567章 8 | 9 | 10 | 11 | 12-17 |
-------------------------------------------------- -------------------------------------------
| 1FA | F | P53 | 你 | X | 4 | 一个 | ... |

通用汽车为此投入了一把扳手……取决于是汽车还是卡车,字符代码位置意味着不同的东西。

我的意思的示例 - 下面的每个 ASCII 表都与 SQL 表相关。etc..意味着还有很多其他的列数据

乘用车

这是位置 4,5 的示例(对应于车辆线/系列)。这些确实结合在一起,VIN 源数据并没有真正区分位置 4 和 5,尽管上面显示了细分。

| 代码 (45)| 线 | 系列 | ETC..
--------------------------------------
| 遗传算法 | 别克 | 长曲棍球 | ETC..

..和位置 6 对应于体型

| 代码 (6) | 风格 | ETC..
--------------------------------------
| 1 | 轿跑车,2 门 | ETC..

卡车

..但对于卡车,结构完全不同。考虑位置 4 独立作为总车辆重量限制 GVWR

| 代码 (4) | GVWR | ETC..
-------------------------------------------
| 大号 | 6000 磅 | ETC..

..和位置 5,6(底盘/系列)现在意味着类似于乘用车的位置 4,5:

| 代码 (56) | 线 | 系列 | ETC..
--------------------------------------
| 房车 | 别克 | 飞地 | ETC..

我正在寻找一种巧妙的方法来在关系设计中解决这个问题。我想在 VIN 被解码时返回一个通用结构——如果可能的话(即不为汽车和卡车返回不同的结构)

4

2 回答 2

1

根据您对我的评论的回答,即您是否可以通过使用其他值来识别车辆类型,一种可能的方法是拥有一个包含公共字段的主表和 2 个详细表,每个表都有适当的字段用于汽车或卡车。

大约类似于以下内容(这里我猜 WMI 是 PK):

主表

| WMI | Restraint | Engine | CheckDigit | Year | Plant | Seq   |

| 123 | 4         | 8      | 9          | 10   | 11    | 12-17 |

汽车明细表

| WMI | Veh Line | Series | Body Type |
| 123 | 2        | 3      | 4         |

卡车明细表

| WMI | GWVR | Chassis  |Body Type |
| 123 | 7    | 8        | 9        |

有了这个,您可以使用唯一的选择来检索所需的数据,如下所示:

Select *
  From
(
   Select M.*,
          C.*,
          Null GWVR,
          Null Chassis,
          Null Truck_Body_Type
     From Master_Table M
     Left Join Car_Table C
       on M.WMI = C.WMI
   Union
   Select M.*,
          Null Veh_Line,
          Null Series,
          Null Car_Body_Type
          T.*
     From Master_Table M
     Left Join Truck_Table T
       on M.WMI = T.WMI
)

至于 DML SQL,您只需要在插入或更新句子之前控制您是否拥有汽车或卡车模型。

当然,您需要确保在汽车明细表或卡车明细表上,每个主行只存在一个明细。

高温高压

于 2012-10-22T17:12:05.000 回答
0

为什么不为解码定义这两个规则;只有一个会解决一个有效的结果。

于 2012-10-21T07:52:10.577 回答