为什么在复合主键中允许空值但不允许空值

why empty values are allowed but not null values in composite primary keys

我正在开发一个连接到 Snowflake 数据库的应用程序。我在加载 CSV 文件时偶然发现了一个问题。如果在加载期间遇到任何空值,我在 copy command 中使用 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', '', ...);

why empty value is considered legit

Empty Strings and NULL Values

An empty string is a string with zero length or no characters, whereas NULL values represent an absence of data.

因此空字符串在概念上不同于 NULL