作者cyclone350 (老子我最神)
看板Database
标题Re: [SQL ] 是否避免null值
时间Wed May 22 23:07:49 2013
※ 引述《lashante (杏花天影)》之铭言:
: 以前在学 PL/SQL 时,
: 是由一位有相当不错业界经验的老师教的。
: 老师有特别提到,设计资料库的栏位时,
: 若可以不使用 null 值,就应该尽量将该栏位设 NOT NULL,
: 即使没有资料,也塞一些将来可以辨识出来为无资料的值进去,
: ex : '' OR -1 之类的,
: 他说:「如果你习惯使用 null 值,
: 将来总有一天你会遇到大问题。」
: 虽然这样的话感觉很武断,
: 但我想他的原意应该是,遇到null值时,
: 在处理table和下SQL指令时,可能总是要做一些额外判断,
: 若是没处理好,取资料若取出奇怪的结果,就很不好找原因之类的。
: * * * * * *
: 现在刚开始工作不久,在开 table 时,
: 我遇到一个 entity A,
: 它关联於 entity B 或 entity C 其中一者,
: 这三个 entity 分别存放於 TABLE A', B', C',
: 其 PK 都是由 1开始 increment 1 的正整数。
: 所以 TABLE A' 就有二个栏位, say: B_id, C_id,
: 分别对应到 TABLE B' 及 TABLE C' 的PK,
: 我很自然的,就将 B_id, C_id 设 NOT NULL,
: 而若 entity a1 是对应到 entity b1,
: 则 entity a1 的 B_id 栏位 就给对应 entity b1 的pk值,
: C_id 栏位就给 -1。
: 老板後来看到,就觉得我多此一举,
: 问我干嘛不把 B_id, C_id 允许 NULL,
: 没对应到的就不写值, 留 null 就好。
: 其实我因为经验不是很够,无法了解老师当初的深意,
: 所以也对老板讲不出个什麽东西来,
: 但是我的老板也好讲话,也没真的很计较这件事,没有叫我改回来。
: 我想请教较我更有经验的各位,在习惯上,
: 避免使用 NULL 值是否真会带来什麽优点,
: 或是反而会有什麽缺点?
: 若是习惯使用 NULL,是否会像在埋地雷一样?
我不知道 null 值到底好不好,不过目前接到一个资料库,情况是这样
如果没有值,有可能是 NULL 或是 ' ' ...
这样我判断是否有值时都要加 TRIM ...
以上只是一种情况... 好坏不确定...
不过我最近在写plsql, NULL 值会有一个缺点 (也不知道算不算缺点)
以下举例
假设有一个栏位是 sex
sex 描述是这样
'1' 代表男人, '2' 代表女人, ' ' 或 NULL 代表无值, 若有其他值代表错误
今天假设你要做判断,可以这样做 (以下撷取片段plsql)
case TRIM(ROWDATA.sex)
when '1' then dbms_output.put_line('男人');
when '2' then dbms_output.put_line('女人');
when NULL then dbms_output.put_line('无值');
else dbms_output.put_line('错误');
end case;
以上,是错的... 因为你永远到不了 NULL 那一行 ...
因为跟 NULL 比较的栏位回传值是 NULL ... ( 不是true 也不是 false )
在 plsql 里面,无法比较 NULL
所以你判断 NULL 时会用 IS NULL 而不是 = NULL
以上例子只是一个 case ... 而且是真实的 case ...
若要修改成可以正确输出会是这样
case NVL(TRIM(ROWDATA.sex),'NULL')
when '1' then dbms_output.put_line('男人');
when '2' then dbms_output.put_line('女人');
when 'NULL' then dbms_output.put_line('无值');
else dbms_output.put_line('错误');
end case;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 119.77.195.98