我正在开发一个连接到 Snowflake 数据库的应用程序。我在加载 CSV 文件时偶然发现了一个问题。如果在加载过程中遇到任何空值,我在copy命令中使用NULL_IF条件将列值更改为null
经过调查,我发现其中一列是复合主键的一部分,并且该列的值在几行中为空。删除 NULL_IF 条件后,它开始正常工作。
为什么复合主键允许空值但不允许空值?
我搜索了很多,但所有答案都试图解释为什么复合键列不能有空值,这有些道理。但为什么空值被认为是合法的呢?有人可以解释一下吗?谢谢
示例:
CREATE TABLE table_employee (
column1 Varchar2(255),
column2 Varchar2(255),
column3 Varchar2(255),
primary key (column1, column2)
....
);
以下插入将会成功:
INSERT INTO table_employee(column1, column2, column3, ...)
VALUES ('', 'abc', '', ...);
以下插入将失败:
INSERT INTO table_employee(column1, column2, column3, ...)
VALUES (null, 'abc', '', ...);
我将尝试解决为什么 Snowflake DB 中的复合主键允许空值但禁止 NULL 值。
首先,我们需要了解 NULL 与空值:
- 造成差异的关键原因:
我的 2 美分:虽然技术上允许在复合主键中使用空字符串,但它们的使用通常表明潜在的数据质量问题或设计缺陷。 通常建议尽可能避免主键中出现空值。