SQL错误150外键

时间:2016-11-24 10:30:33

标签: sql

我想在我的表中添加一个外键并且它给我一个错误,引用具有相同的数据类型,任何想法?

这是我的代码:

        CREATE TABLE order_task
      (
        order_number numeric (20) NOT NULL ,
        order_sending_date TIMESTAMP,
        order_profile_code varchar (20) NOT NULL ,
        order_weight decimal (20.10) NOT NULL ,
        order_piston_number numeric (1) NOT NULL
      );
      ALTER TABLE order_task ADD CONSTRAINT ord_num_dt_pk PRIMARY KEY (order_number , order_sending_date);

                 CREATE TABLE pre_product
         (
           pre_product_number numeric (5) NOT NULL ,
           pre_product_date TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ,
           pre_product_lenght_count numeric (5) NOT NULL ,
           pre_product_rod_count numeric (5) NOT NULL,
           pre_product_rod_lenght float (20) NOT NULL,
           pre_product_weight float (20) NOT NULL,
           pre_product_piston_number numeric (1) NOT NULL ,
           pre_product_profile_code varchar (20) NOT NULL ,
           pre_product_shift_number numeric (1) NOT NULL,
           pre_product_employee varchar (40) NOT NULL ,
           pre_product_scrap float (20) NOT NULL,
           pre_product_scrap_percentage float (3,3) NOT NULL ,
           pre_product_status varchar (40) NOT NULL,
           pre_product_order_number numeric (20) NOT NULL ,
           pre_product_order_date TIMESTAMP
         );
       ALTER TABLE pre_product ADD CONSTRAINT pp_num_date_pk PRIMARY KEY (pre_product_number,pre_product_date);

       ALTER TABLE pre_product ADD CONSTRAINT pp_on_pp_fk FOREIGN KEY (pre_product_order_number)
       REFERENCES order_task (order_number);

       ALTER TABLE pre_product ADD CONSTRAINT pp_on_ot_fk FOREIGN KEY (pre_product_order_date)
       REFERENCES order_task (order_sending_date);

当我尝试在pre_product_order_date和order_sending_date之间添加外键时,错误出现在最后一行

2 个答案:

答案 0 :(得分:0)

  • order_sending_date作为PK的一部分?看起来像一个糟糕的设计。
  • order_sending_date绝对不是唯一的,所以如果你想定义一个FK,你应该在两个列上定义它

    ALTER TABLE pre_product ADD CONSTRAINT pp_on_pp__ot_fk FOREIGN KEY(pre_product_order_number,pre_product_order_date)        参考order_task(order_number,order_sending_date);

答案 1 :(得分:0)

您在表格上创建的主键是两列order_numberorder_sending_date上的复合主键。
因此,应该在两个列上创建外键,而不仅仅是其中的一部分。由于pre_productorder_task表的子表。

ALTER TABLE pre_product
   ADD CONSTRAINT pp_on_pp_fk FOREIGN KEY (pre_product_order_number_date)
       REFERENCES order_task (order_number,order_sending_date);