zen*_*con 7 sql database-design
我为不同的OEM 设计了一些车辆识别码(VIN)解码器.关于VIN编号的事情......尽管有些标准化,但每个OEM都可以重载字符位置代码并对它们进行不同的处理,添加"额外"元数据(即指向VIN编号之外的更多数据的星号)等等.尽管如此所有这些,我已经能够构建几个不同的OEM VIN解码器,现在我正在尝试构建一个GM VIN解码器,它让我头疼.
问题的关键在于,GM根据车辆或汽车的不同,对车辆属性部分(位置4,5,6,7)进行不同的处理.这是细分:


通常我所做的是设计我自己的原始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被解码时,我想返回一个共同的结构 - 如果可能的话(即没有为汽车和卡车返回不同的结构)