- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想使用 mysql 实现一个时态数据库。我发现 BerekelyDB 引擎不支持当前的 MySQL 版本。我想存储数据并查询历史记录。 (不想删除任何数据)。例如,假设 table 上小 Actor 。
Student_ID Student_Name Class Added_Date Deleted_Date
1004 ABC 19 2011-02-03:18-24 2011-04-03:20-24
1004 ABC_D 19 2011-04-03:20-24 null
这是我想要的示例表。当我更改一些细节时,将添加一个 deleted_datetime 戳记并添加一个全新的记录。删除记录时,它只会添加一个 Deleted_Date
那么我是否必须编写整个库,或者是否有任何特定的库或数据库实现来支持我的问题?..
顺便说一句,我找到了这个 http://www.cs.arizona.edu/projects/tau/tbdb/但似乎它只适用于旧版本。
最佳答案
当您将非时态表升级为时态表时,您可以通过为时态表创建非时态 View 来实现与旧应用程序的兼容性。该 View 将时间数据减少为当前有效数据。对于这样的 View ,您可以创建所谓的 instead of 触发器来对时态表执行正确的操作。
不幸的是,这不适用于 MySQL,因为 MySQL 的功能是有限的。这意味着您有两种可能的解决方案:
以下示例显示了第一个备选方案的可能解决方案。我已经使用 Oracle 10gR2 测试了该示例。
为时间数据创建一个表。当前值为值,其结尾为 NULL。唯一约束防止表格包含多个当前值。这表没有主键,因为 id 不是唯一的临时表,但仅在遗留 View 中。
CREATE TABLE temporal (
id NUMBER NOT NULL,
starting TIMESTAMP NOT NULL,
ending TIMESTAMP,
attribute CHAR(20),
UNIQUE (id, ending));
为遗留应用程序创建 View 。
CREATE VIEW legacy (id, attribute) AS
SELECT id, attribute FROM temporal WHERE ending IS NULL;
为执行的遗留表创建一个“代替”触发器正确插入时态表。插入到遗留表也是对时态表的插入。
CREATE TRIGGER legacy_insert
INSTEAD OF INSERT ON legacy
FOR EACH ROW
BEGIN
INSERT INTO temporal (id, starting, ending, attribute)
VALUES (:NEW.id, CURRENT_TIMESTAMP, NULL, :NEW.attribute);
END;
为旧表的更新创建一个“代替”触发器。遗留表的更新是对旧表的更新和插入临时表。当前值得到更新,对于新值插入新行的值。
CREATE TRIGGER legacy_update
INSTEAD OF UPDATE ON legacy
FOR EACH ROW
BEGIN
UPDATE temporal SET ending = CURRENT_TIMESTAMP WHERE id = :NEW.id;
INSERT INTO temporal (id, starting, ending, attribute)
VALUES (:NEW.id, CURRENT_TIMESTAMP, NULL, :NEW.attribute);
END;
为删除中的属性创建一个“代替”触发器遗留表。遗留表的删除是对旧表的更新时态表。
CREATE TRIGGER legacy_delete
INSTEAD OF DELETE ON legacy
FOR EACH ROW
BEGIN
UPDATE temporal SET ending = CURRENT_TIMESTAMP
WHERE id = :OLD.id AND ending IS NULL;
END;
尝试插入。
INSERT INTO legacy (id, attribute) VALUES (1, 'a');
SELECT * FROM legacy;
SELECT * FROM temporal;
尝试更新。
UPDATE legacy SET attribute = 'A' WHERE id = 1;
SELECT * FROM legacy;
SELECT * FROM temporal;
尝试删除。
DELETE FROM legacy WHERE id = 1;
SELECT * FROM legacy;
SELECT * FROM temporal;
关于mysql - 如何在 MySQL 中实现 Temporal Upward Compatibility?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9446408/
我还不擅长 Android 动画,但我需要在我的新项目中实现一个弹跳动画。以下是我用来完成它的动画文件。 此动画将使要设置动画的对象向下弹跳。我该怎么做才能让它向上反弹? (
我正在编写一个递归函数来查找是否存在从根到叶子的路径总和达到某个数字(用户输入总和)。每次我进入新的递归调用时,我都会使用 node->data 的值来增加 current_sum 的值。 Curre
问题是: 我需要知道是否有办法在 上做一个向上的行跨度表单上的元素。 我正在读取数据库中的一些行,我需要将它们放入 html 表中。我正在做类似的事情: echo ""; while($result
如果您有一个非常非常大的 JPG 和一个嵌入 HTML 的 BMP 并将其加载到 Firefox 中,您会注意到 JPG 将“向下”加载(从左到右绘制,然后向下)并且 BMP 将加载“向上”(从右向左
当我尝试从子组件修改基本组件的变量时。我发现我只能通过严格执行以下操作来做到这一点: 1:基础组件必须定义了一个事件处理程序,严格来说是一个变量onVariableChange事件处理程序,并将其分配
一个潜在客户有一个网站,其页面是在 Dreamweaver(tm) 中完成的。我没有 Dreamweaver(tm),也从未使用过它,过去曾在使用它创建的页面上看到一些意大利面条 (html) 代码。
我对一些动态选择元素使用 Harvest Chosen,但我遇到了一个问题,如果选择元素靠近页面底部,选择列表会被 chop 。包含的 div 设置为溢出:隐藏,并且出于某种原因将其更改为溢出:可见导
向后二进制兼容性(或向下兼容性)- 使用旧版本库 API 构建的客户端能够在新版本 (wiki ) 上运行。 向上二进制兼容性(或向前兼容性)- 使用新版本库 API 构建的客户端能够在旧版本 (wi
我如何在 Swift 中使用加速度计/陀螺仪才能查明是否... A)将 iPhone 握在用户脸部正前方,即“向上”握持或 B) iPhone 已放在 table 上,即显示屏朝上。 C) 当它被放在
我想使用 mysql 实现一个时态数据库。我发现 BerekelyDB 引擎不支持当前的 MySQL 版本。我想存储数据并查询历史记录。 (不想删除任何数据)。例如,假设 table 上小 Actor
我必须如何在 objective-c 中使用加速度计/陀螺仪才能确定是否... A) iPhone 刚好放在用户面前,即“向上”或 B) 例如将 iPhone 放在 table 上,即显示屏朝上。 最
我有一个显示下拉列表的方法。它在 IE 11 中的行为与其他浏览器不同。
我正在使用 xamarin 表单。我用xaml设计了一个登录表单页面。我想在键盘出现时向上移动登录表单 View ,以便在平台 Android 和 IOS 上都可以看到文本字段和登录按钮。如何计算键盘
我的要求是固定宽度和高度的多个相邻内容可编辑 div(在溢出时滚动,因此最大高度)。 http://jsfiddle.net/3gut98sw/4/ 问题:溢出后,如果您在 div 内的书面文本之间按
这个问题在这里已经有了答案: Why is this inline-block element pushed downward? (8 个答案) 关闭去年。 我有以下 HTML: abc
我有一个外部组件(蓝绿色),其中包含一些我自己的 flexbox 工具栏ui-button纽扣。和一个内部组件,主要在棕色区域做它的事情(如你所料)。 但是,根据内部组件(有几个来回切换的组件),必须
我正在创建一款类似于 Doodle Jump 的游戏,我的玩家在得分的同时从物体上弹起并向上移动。 如何使 Y 轴无限向上移动并生成相同的对象,但随着玩家向上移动而处于随机位置? 我没有任何相关代码,
有人可以发布一个示例代码,说明我如何让我的游戏屏幕在我的玩家节点“跳跃”到 y 轴时向上移动。和涂鸦跳跃一样吗?目前它显然只是直接跳出屏幕顶部。 使我的“平台”节点从父节点中删除,然后在我向上移动屏幕
我正在尝试使用 XCode 7 的 UI 测试功能来运行可以遍历整个 TableView 层次结构的自动化测试。 (我正在使用迭代加深的深度优先搜索。)在每个屏幕中,我让 ui 测试器依次点击每个单元
我是一名优秀的程序员,十分优秀!