车辆识别号码(VIN)设计

zen*_*con 7 sql database-design

我为不同的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表等.然后我构建一个View,它连接一些上下文数据,这些数据可能或不能直接从VIN编号本身的字符代码中收集(例如,一些车辆类型仅具有某些车辆发动机).

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

| WMI | Restraint | LineSeriesBody | Engine | CheckDigit | Year | Plant | Seq   |
| 123 | 4         | 567            | 8      | 9          | 10   | 11    | 12-17 |
---------------------------------------------------------------------------------
| 1FA | F         | P53            | U      | X          | 4    | A     | ...   |

通用汽车已经对此进行了调整......取决于它是汽车还是卡车,角色代码位置意味着不同的东西.

我的意思的例子 - 下面的每个ASCII表都与SQL表有些相关.etc..意味着有很多其他的柱状数据

乘用车

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

| Code (45)| Line  | Series   | etc..
--------------------------------------
| GA       | Buick | Lacrosse | etc..

..和位置6对应于体型

| Code (6) | Style         | etc..
--------------------------------------
| 1        | Coupe, 2-Door | etc..

卡车

但对于卡车来说,结构完全不同.考虑位置4自身作为格罗斯车辆重量限制GVWR.

| Code (4) | GVWR     | etc..
-------------------------------
| L        | 6000 lbs | etc.. 

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

| Code (56) | Line  | Series  | etc.. 
---------------------------------------
| RV        | Buick | Enclave | etc..

我正在寻找一种在关系设计中解决这个问题的狡猾方法.当VIN被解码时,我想返回一个共同的结构 - 如果可能的话(即没有为汽车和卡车返回不同的结构)

小智 0

为什么你不定义这两个解码规则?只有一个才能得出有效结果。