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
数据类型,您可以在WHERE
or 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)