标签: database-theory

何时使用 TINYINT 而不是 INT?

一般来说,我总是使用 Ints。我知道理论上这不是最佳实践,因为您应该使用保证存储数据的最小数据类型。

例如,tinyint当您知道将存储的唯一数据是 1、0 或 null(以后将其扩展为 2 或 3 的可能性很小)时,最好使用。

但是,我知道这样做的唯一原因是出于存储目的——在一行中使用 1 个字节而不是 4 个字节。

除了节省硬盘空间之外,仅使用tinyintsmallint甚至bigint)会产生什么影响int

sql-server database-theory

93
推荐指数
5
解决办法
6万
查看次数

即用型数据库模型示例

在哪里可以找到现成的数据库模型?

我不需要包含数据的数据库,而只需要模式(UML 图)。也许类似于此链接中数据模型,但要复杂得多和现实世界。

database-design database-recommendation database-theory

23
推荐指数
1
解决办法
2万
查看次数

CAP定理背后的推理是什么?

http://en.wikipedia.org/wiki/CAP_theorem

http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf

我想是不是非常简单,为什么只有两个

  1. 一致性
  2. 可用性
  3. 分区容差

可以适用于任何给定的分布式数据库系统。这个猜想被证实,但有没有看出为什么一个简单的方法可能是,这可能持有?

我不是在寻找证明,只是一种理解为什么这个定理可能有意义的好方法。理由是什么?

database-design distributed-databases database-theory

21
推荐指数
1
解决办法
1328
查看次数

为什么首先对 NULL 进行排序?

为什么当我们在列中有一个 NULL 值并且我们按值升序排序时,首先对 NULL 进行排序?

select 1 as test
union all
select 2
union all
select NULL
union all
select 3
union all
select 4
order by test
Run Code Online (Sandbox Code Playgroud)

结果是

NULL
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

我一直认为 NULL 意味着“不确定”或可能的“未知”。如果这是真的,它们会不会排在最后,因为该值可能大于所有其他值?(或者这是某个地方的排序选项?)

我使用的是 SQL Server 2008R2,但我怀疑这适用于所有 SQL Server,并且可能适用于所有 RDBMS。

sql-server database-theory sorting

20
推荐指数
2
解决办法
3万
查看次数

连接表是一个好习惯吗?

假设我有一个包含用户信息的大表和另一个包含多个位置的表。然后我使用另一个包含 user_id 和 location_id 的表。

为了检索数据,我必须使用 Left Join 查询。与将所有内容放在一张桌子中相比,这不是使整个过程更长的检索时间吗?例如,我可以将位置作为文本放在同一张桌子上。

编辑:这是一个例子。

CREATE TABLE  `user` (
`id` int(11) NOT NULL,
  `name` varchar(45) DEFAULT NULL,
  `gender` enum('M','F') DEFAULT NULL
);

CREATE TABLE `user_location` (
  `user_id` int(11) NOT NULL,
  `location_id` int(11) NOT NULL
);

CREATE TABLE `location` (
`id` int(11) NOT NULL,
  `location` varchar(45),
  `parent_id` varchar(45) 
);
Run Code Online (Sandbox Code Playgroud)

注意:请假设所有相关字段都在它们之间正确索引。

编辑:我目前有一个大型数据库,用户通过如上所述的连接表检索他们的位置。我被要求优化数据库,因为搜索结果很慢。我添加了memcache它并且它有了显着的改进,但现在我只是想知道左连接。

例如,当前查询是这样的:

SELECT * FROM users 
LEFT JOIN user_location 
ON user_location.user_id = user.id 
LEFT JOIN location
ON location.id = user_location.location_id;
Run Code Online (Sandbox Code Playgroud)

这只是为了获取位置。它们还有其他几个通过联结检索的字段,并且都需要它们来查看用户的个人资料。我们的电话号码、地址、密码、出生日期和许多其他信息都在不同的表格中。

为了让我为用户配置文件创建一个页面,我必须向服务器发送一个大型查询。现在在第一次被缓存之后就可以了。但我只是想知道为什么有人会像这样构建他们的数据库?

mysql database-design database-size database-theory

15
推荐指数
3
解决办法
2万
查看次数

OLAP 和 OLTP 中的“在线”究竟是什么?

我有点困惑,因为我在质疑 OLTP 和 OLAP 中“在线”的定义。我曾经认为,这里的“在线”意味着我们希望在有限的时间内根据某个实例的可用数据获得答案。

但是 OLAP 查询可能需要几个小时来计算 - 这不是离线的吗?

快速搜索表明离线 OLAP 听起来相当混乱(离线在线分析处理)......?

究竟什么是“在线”?

terminology transaction olap database-theory online-operations

15
推荐指数
1
解决办法
1414
查看次数

什么是“数据库”?

这个问题有很多讨论:大型搜索引擎使用哪些数据库技术?

这么多的讨论让我感到困惑。那么……什么是数据库?只有关系数据库是“数据库”吗?面向对象的数据库是“数据库”吗?是否有任何允许我存储和检索信息(如地图、列表等)的系统是数据库?

或者数据库是否必须存储/检索信息并且还具有一些管理功能,例如用户和权限?dBase III 是否加上数据库,因为它不是真正的关系型数据库?

terminology database-theory

14
推荐指数
4
解决办法
794
查看次数

数据库研究的先驱

谁对数据库研究做出了改变人生的贡献?我想更多地了解他们。

database-theory

12
推荐指数
4
解决办法
698
查看次数

两条 SQL 语句的数学相等性

有没有办法检查两个 SQL 语句的数学相等性?

我有两个 SQL 语句:

  • SQL_STATEMENT_1
  • SQL_STATEMENT_2

对数据运行这两个语句并比较输出根本没有帮助。

需要评估语句背后的集合数学,就像方程求解器一样。

超出我的问题范围的是:

  • 等式以外的比较(大于、小于、LIKE、...)
  • 存储过程或触发器
  • 公用表表达式 (WITH)

范围内:

  • 子选择:WHERE other_id IN (SELECT id FROM other WHERE ...)
  • 加入

database-theory

10
推荐指数
2
解决办法
3729
查看次数

数据库中的多维索引

哪些数据库使用真正的多维索引?oracle 是否曾经使用多个索引从表中获取数据,还是总是使用似乎具有最高选择性的索引?其他dbms怎么样?

index database-agnostic database-theory

9
推荐指数
3
解决办法
1961
查看次数