Mar*_*las 15 sql database theory
具体来说,在关系数据库管理系统中,为什么我们需要在创建时知道列的数据类型(更可能是对象的属性)?
对我来说,数据类型感觉就像是一种优化,因为一个数据点可以通过多种方式实现.将语义角色和约束分配给数据点,然后让引擎在内部检查和优化哪种数据类型最适合用户,这不是更好吗?
我怀疑这是繁重的地方,为什么要问用户而不是做工作更容易.
你怎么看?我们要去哪儿?这是一个现实的期望吗?或者我有一个错误的假设?
Pow*_*ord 16
答案是存储空间和固定大小的行.
搜索的固定大小行比可变长度行快得多,因为如果您知道所需的记录号和字段,则可以直接查找正确的字节.
编辑:话虽如此,如果你在数据库表中使用正确的索引,固定大小的行并不像以前那么重要.
Qua*_*noi 11
SQLite并不关心.
其他RDBMS的使用原则是在80年代早期设计的,当时它对性能至关重要.
例如,Oracle不区分a NULL和空字符串,并将其保持NUMBER为十进制数字的集合.
这在今天几乎没有意义,但是当Oracle开发时,这些都是非常聪明的解决方案.
但是,在我开发的其中一个数据库中,使用了非索引值,这些值存储为VARCHAR2s,根据几个条件动态地转换为适当的数据类型.
但这是一件非常特殊的事情:它用于使用集合在一次调用数据库时批量加载键值对.
动态SQL语句用于解析数据并根据键名将它们放入适当的表中.
所有值都VARCHAR2按原样加载到临时列,然后转换为NUMBER's和DATETIME's以放入其列中.
Tom*_*ard 10
显式数据类型对于效率和存储来说是巨大的.如果它们是隐含的,则必须"弄清楚",因此会产生速度成本.索引也很难实现.
我怀疑,虽然不是积极的,但是显式类型平均也会产生更少的存储空间.特别是对于数字,二元int和一串数字字符之间没有比较.
嗯......你的问题有点令人困惑.
如果我理解正确,你会问为什么我们为表列指定数据类型,以及为什么"引擎"自动确定用户需要什么.
数据类型充当约束 - 它们保护数据的完整性.int列中永远不会有字母,这是一件好事.数据类型不会自动为您决定,您在创建数据库时指定它 - 几乎总是使用SQL.
你是对的:为列分配数据类型是一个实现细节,与数据库引擎背后的集合论或微积分无关。作为一个理论模型,数据库应该是“无类型的”并且能够存储我们输入的任何内容。
但我们必须在具有实际约束的真实计算机上实现数据库。从性能的角度来看,让计算机动态地尝试找出如何最好地存储数据是不切实际的。
例如,假设您有一个表,其中存储了几百万个整数。计算机可以正确地计算出它应该将每个数据存储为整数值。但是,如果有一天您突然尝试在该表中存储一个字符串,数据库引擎是否应该停止一切操作,直到将所有数据转换为更通用的字符串格式?
不幸的是,指定数据类型是一种不可避免的罪恶。
| 归档时间: |
|
| 查看次数: |
3174 次 |
| 最近记录: |