我有一个表BILL,它与另一个表BANK_CARD相关联,如下所示:
create table BILL (
id_bill BIGSERIAL not null,
id_bank_card BIGSERIAL null,
id_registred_user BIGSERIAL not null,
reference_number INT4 null,
purchase_date DATE null,
bill_status VARCHAR(50) null,
payment_method VARCHAR(50) null,
constraint PK_BILL primary key (id_bill)
);
create table BANK_CARD (
id_bank_card BIGSERIAL not null,
id_registred_user BIGSERIAL not null,
card_type VARCHAR(50) null,
card_number INT4 null,
expiring_date DATE null,
cipher INT4 null,
constraint PK_BANK_CARD primary key (id_bank_card)
);
表BILL与表BANK_CARD有0..1关联,BANK_CARD与表BILL有1..n关联。
但是当我执行我的sql脚本时,我收到以下错误:
conflicting NULL/NOT NULL declarations for column "id_bank_card" of table "bill"
因为关系BILL和BANK_CARD是0..1,外键id_bank_card在表格中可以为空,所以我不明白为什么会出现这个错误。
请帮忙吗? 感谢。
答案 0 :(得分:5)
您对主键和外键的数据类型定义感到困惑。 bigint
是NULL
类型值的生成器。外键应该使用该数据类型。见下面的表格定义。此外,使用NULL
子句是多余的,因为这是默认行为。主键不能是NOT NULL
,因此create table bank_card (
id_bank_card bigserial,
id_registred_user bigint references <user table>,
card_type VARCHAR(50),
card_number INT4,
expiring_date DATE,
cipher INT4,
constraint PK_BANK_CARD primary key (id_bank_card)
);
create table bill (
id_bill BIGSERIAL,
id_bank_card bigint references bank_card,
id_registred_user bigint references <user table>,
reference_number INT4,
purchase_date DATE,
bill_status VARCHAR(50),
payment_method VARCHAR(50),
constraint pk_bill primary key (id_bill)
);
也是多余的。
LookUpEdit.Properties.AllowNullInput
答案 1 :(得分:0)
如果您使用的是 Java + PostgreSQL:
如果您不小心将空字符串插入语句中,则会发生这种情况。
String N = System.getProperty("line.seperator");
返回null,搞砸了我的sql语句。
修复:(选择一项)
String N = System.lineSeparator();
String N = "\n";
出现在我的代码中的确切字符串:
String CT =(""
//:+"---------10--------20--------30-------39
//:+"0123456789012345678901234567890123456789
+"CREATE TABLE t_1( "+N//:0
+"id SERIAL PRIMARY KEY "+N//:30
+" ,c_1 INT "+N//:60
+" ,c_2 VARCHAR (255) "+N//:90
+" ,c_3 CHARACTER( 8 ) "+N//:120
+" ,c_4 BOOLEAN "+N//:150
+" ,c_5 BYTEA "+N//:180
+" ,c_6 DATE "+N//:210
+"); " //:240
);;
当N == null而不是“ \ n”时的确切错误消息:
org.postgresql.util.PSQLException: ERROR: conflicting NULL/NOT NULL declarations for column "nullid" of table "t_1"
堆栈: Java + Heroku + Tomcat9 + PostGreSQL 9.5.13