- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于一个项目,我需要在 MySQL 数据库中实现行版本控制。在阅读了可能的解决方案后,我选择使用一个表并添加 start_date
和 end_date
列,以指定该版本/行何时处于事件状态。
对于同一行的多个版本,id
列是相同的。因此它在表中不再是唯一的。现在我不确定如何设置主键(和其他索引),同时保持 id
列的自动增量事件。
我看到两个选项。第一个是使 id
只是一个索引,如下所示:
CREATE TABLE `thing` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
… other_columns …,
`start_date` datetime NOT NULL,
`end_date` datetime DEFAULT NULL,
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
另一种是将 id
和 start_date
设为主键,如下所示:
CREATE TABLE `thing` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
… other_columns …,
`start_date` datetime NOT NULL,
`end_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`,`start_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
什么是最佳选择,尤其是在考虑性能时?
例如,数据如下所示:
id | some_column | start_date | end_date
---|-------------|------------|-----------
1 | Jonathn | 2013-01-01 | 2013-01-02
1 | Jonathan | 2013-01-02 | NULL
2 | James | 2013-02-01 | NULL
在这种情况下,我添加了“Jonathn”,但稍后将其更改为“Jonathan”(同时保持相同的 ID)。稍后添加另一行(“James”)。
最佳答案
您的第一个示例 CREATE TABLE 语句没有键*,您的第二个示例有。我认为你的第二个例子就是你想要的:
CREATE TABLE `thing` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
… other_columns …,
`start_date` datetime NOT NULL,
`end_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`,`start_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
您可能希望也可能不希望 id 成为一个自动递增的列,但这主要是一个功能问题(您希望能够生成递增的值还是自己插入)而不是逻辑设计或性能。
*不幸的是,MySQL 使用关键字KEY
来指定索引。必须使用 UNIQUE KEY
或 PRIMARY KEY
语法指定键。
关于mysql - 如何在行版本化MySQL表(SCD类型2)中设置主键、自增和索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874763/
在 SSIS 中,如果传入的数据集对同一个业务 key 有多个记录,我如何在不使用 SCD 向导的情况下将其加载到具有 SCD 类型 2 的维度表。 样本数据集 Customer ID Name
我正在尝试使用合并查询在数据构建工具中实现 scd1。但我没有得到在增量模型中编写此查询的确切方法。 谁能告诉我们必须在哪里编写合并查询。 {{ config( materia
在实现时间日期时间对时,哪种方法更好? 方法一 _RK FROM_DTTM TO_DTTM 1 01-JAN-2012 00:00:00 31-DEC-201
如何处理事实表中的 scd type2 更新?我没有在事实表上进行增量加载。任何好的方法都可以遵循。谁能建议我,以便我在将数据加载到事实表时可以采用相同的方法。 ETL(Pentaho) 最佳答案 我
我们有以下数据: 事实表: id | key | name | salary | loaction | start_date 1 | emp_1 | Shubham | 10000 |
假设我们有一个代表销售办事处的维度。办公室可能会搬迁,这将是第二类变化。我们希望跟踪旧办公地点发生的操作以及现在新办公地点发生的操作,并了解更改何时发生。到目前为止,只是标准的II型设计。现在假设一个
我需要生成报告,该报告将每天为 SCD 表显示新/更改的行数。 这是创建表的 SQL: create table #scd( code nvarchar not null , start
这里有点新,但就这样吧。用于填充 Type-3 SCD 的算法是什么?我已经设置了事实表和维度表,并且已经通过 talend 中的 TOS 完成了此操作,但需要代码。使用MySQL。任何类型的一般想法
我在 mssql 服务器中有 2 个表。我可以通过自定义插入/更新/删除以及通过 Merge 语句执行 scd。 Awesome Merge 我想知道是否有任何通用程序可以达到目的。我们只需将 2 个
我在让 JAXB 绑定(bind)文件与 annox 和 SCD 元素选择一起使用时遇到困难。该模式是一个简单的基本模式,具有名为 SongType 的 ComplexType。我尝试了正常的方法做如
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
尝试在 Spark 2.4.4 中实现 SCD Type 2 逻辑。我有两个数据框;一个包含“现有数据”,另一个包含“新传入数据”。 下面给出了输入和预期输出。需要发生的是: 所有传入行都应附加到现有
我试图了解 SCD 类型 5,6 和 7 的工作原理。 我读了这个 article金博尔集团和stack overflow回答类型 6。 我可以理解 Type 6 的概念、它是如何工作的以及何时使用它
如何将 .net core 应用程序打包为“框架相关部署 (FDD)”或“自包含部署 (SCD)' 使用 Visual Studio 2017 (IDE) ?我知道如何通过 dotnet CLI/命令
我有这些数据: CREATE TABLE #student ( student_id INT, status VARCHAR(50), created_dt DA
假设您在 CouchDB 中有一个类似日志的文档集合,如 JSON 文档和属性的表格表示(每行是一个 JSON 文档,每列是一个属性): PRODUCT_ID START_DATE PRICE 000
我正在尝试解决如何为我的应用程序创建“日志”并将它们存储到数据库的问题。 假设我有这个数据库结构: 第一个表: weatherstation_id |气象站名称 | weatherstation_ip
我是一名优秀的程序员,十分优秀!