首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在mysql中管理版本化数据

在mysql中管理版本化数据
EN

Stack Overflow用户
提问于 2018-06-08 01:49:05
回答 1查看 70关注 0票数 0

假设我有以下表格:

代码语言:javascript
复制
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

基本上,我有一个条目/属性类型模式,我正在尝试对其进行版本管理。

如何查询才能始终获得汽车的最新批准版本及其所有属性?请注意,某些属性可能不会在特定版本中更新。例如:在下面的示例中,carid:1的批准版本为

代码语言:javascript
复制
Honda AccordEX color:green doors:4

一些数据来自V3,另一些数据来自V1。

这听起来像是有一个很好的模式来管理这种类型的数据。有人能给我指个方向吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-08 05:37:07

我认为:

代码语言:javascript
复制
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,但是有一个明显不需要的重复版本字段。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50747341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档