SQL实现如何在内部存储重复记录?

时间:2017-09-25 19:09:05

标签: sql

我正在努力更好地理解SQL在实践中的运作方式。 它是否将重复记录存储为记录的附加参数(表示多重性)?或者,我们只是向表中添加另一个重复记录吗?或者,其他一些方法?我很好奇大多数SQL发行版都做了什么。

例如,假设我们有关系R(a,b,c)和整数属性我们可以在内部存储如下:

Integer-a Integer-b Integer-c Multiplicity
1         2         3         2

替代地

Integer-a Integer-b Integer-c
1         2         3
1         2         3

2 个答案:

答案 0 :(得分:3)

SQL不存储具有多重性的重复记录(并且至少没有我熟悉的数据库引擎)。

每条记录占据自己的空间。通常,记录与其他记录一起存储在页面上。这些是数据库使用的I / O单位。

那就是说,有一些警告。例如,列式数据库独立存储每一行​​。存在压缩技术,其中相邻值将以多重因子存储。这不完全是你的建议,但它也是一致的。

如果您想了解数据库的工作原理,我建议您选择一个并对其进行研究。 MySQL有一个非常简单的模型(但由于存储层与处理层分离,因此很复杂)。 Postgres和SQL Server在页面布局和存储引擎上也有合理的文档。

答案 1 :(得分:1)

我不认为SQL引擎使用多重性。其背后的原因是,为了使用多重性(在问题中定义它的方式),2个或2个以上的行应该相同。

现在对于像Oracle这样的引擎来说情况并非如此,因为oracle会隐式地将id添加到名为 row_id 的每一行,这对于每一行都是唯一的,并且可以用来标识整行和它的实际/物理存储位置。

就列内的重复而言,我想列中的值(插入数据时)不会有任何检查/比较,除非列被定义为主键或列上有唯一约束。

希望它有所帮助!

相关问题