rjz*_*zii 13 sql-server oracle database-design query-optimization
正如标题中所述,在设计数据库时,处理具有多个列的表的首选方法是什么,这些列只是将true/false值存储为单个或者值(例如"Y/N:或"0/1") )?同样,是否存在可能影响列处理方式的不同数据库(例如Oracle和SQL Server)之间可能出现的问题?
Qua*_*noi 14
在SQL Server,有BIT数据类型.您可以在那里存储0或1,比较值但不运行MIN或MAX.
在Oracle,你只需使用NUMBER或CHAR(1).
In MySQL和PostgreSQL任何数据类型都可以隐式转换为BOOLEAN.
两个系统都支持BOOLEAN数据类型,您可以在WHEREor ON子句中使用不带运算符的情况:
SELECT *
FROM mytable
WHERE col1
Run Code Online (Sandbox Code Playgroud)
,这是不可能的SQL Server和Oracle(你需要有某种形式的谓语那里).
在MySQL,BOOLEAN是的同义词TINYINT(1).
在PostgreSQL太(在存储方面),但在逻辑上,它不隐式转换为任何其他类型.
根据我自己的经验,我更喜欢char(1)代表'Y'或'N'.使用0和1可能会有点混乱,这取决于我已经喝了多少啤酒,C++ main()函数在成功时返回0.ENUM和BIT类型比它们的价值更麻烦.
有趣的是,MySQL information_schema使用VARCHAR(3)表示"是"或"否".
例:
information_schema.USER_PRIVILEGES (
...
IS_GRANTABLE VARCHAR(3) NOT NULL DEFAULT ''
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3108 次 |
| 最近记录: |