管理mysql中的版本化数据

时间:2018-06-07 17:49:05

标签: mysql sql versioning

假设我有以下表格:

Error in .getReactiveEnvironment()$currentContext() :
Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)

基本上,我有一个入口/属性类型模式,我试图进行版本管理。

如何查询此内容以始终获取具有所有属性的最新批准版本的汽车?请注意,某些属性可能无法在特定版本中更新。即:在下面的例子中,carid的批准版本:1是

Cars
--------
ID  Make    Model       Version 
1   Honda   Accord      v1
2   Honda   Civic       v1
3   Honda   Odysey      v1
1   Honda   AccordLX    v2
1   Honda   AccordEX    v3

CarProperties
-------------
CarID   key value   Version
1   color   red v1
1   doors   4   v1
2   color   blue    v1
2   doors   2   v1
3   color   black   v1
1   color   blue    v2
1   color   green   v3

Versions
-----------
ID  Status
v1  Approved
v2  Pending
v3  Approved

来自V3的一些数据和来自V1的其他数据。

这听起来有一个很好的模式来管理这种类型的数据。有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我想这个:

WITH car_version_latest AS (
     SELECT c.*, ROW_NUMBER() OVER (PARTITION BY (c.ID, c.Make, c.Model) ORDER BY c.Version DESC) AS rn
     FROM Cars AS c
     )

SELECT * FROM car_version_latest cvl
WHERE cvl.rn = 1;

会合理地运作,但坦率地说不清楚。

那就是说,你的数据模型坦率地说有点奇怪。您的行具有相同的ID但更改属性(为什么CarProperties中没有make和model?)。

您的CarProperties表是(有点)EAV,但有一个显然不需要的重复版本字段。

我认为你真的需要修改你的数据模型并将其标准化一点。