【问题标题】:how can i make my cart table work properly in postgress?如何使我的购物车表在 postgres 中正常工作?
【发布时间】:2021-08-03 18:22:50
【问题描述】:

我们尝试输入的是字段,我们选择在 atmept 中手动插入 cart_id,以便将同一个购物车用于多个项目,例如商店:

BEGIN;
INSERT INTO cart_tb(cart_id, inventory_id, desired_amount, row_status)
VALUES
(1, 1, 2, 1),
(2, 3, 1, 1),
(2, 1, 1, 1);
END;

基本上它应该如何工作是我只能有 1 个 cart_id 但有多个库存 id (inv_id),但 Inv_id 和 cart_id 的组合应该是唯一的,所以我可以拥有不同的购物车,它们可以像现实世界中一样拥有相同的物品情况。 这是我当前的表:

CREATE TABLE public.cart_tb
(
    cart_id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
    inventory_id integer NOT NULL,
    desired_amount integer NOT NULL,
    row_status integer NOT NULL,
    CONSTRAINT "cart_PK" PRIMARY KEY (cart_id),
    CONSTRAINT "cart_UK" UNIQUE (cart_id, inventory_id),
    CONSTRAINT "cart_inventory_FK" FOREIGN KEY (inventory_id)
        REFERENCES public.inventory_tb (inventory_id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
)

TABLESPACE pg_default;

ALTER TABLE public.cart_tb
    OWNER to postgres;

关于如何解决此问题的任何建议?我不断遇到密钥冲突..

ERROR:  duplicate key value violates unique constraint "cart_PK"
DETAIL:  Key (cart_id)=(2) already exists.
SQL state: 23505

【问题讨论】:

    标签: sql postgresql database-design


    【解决方案1】:

    好的,您似乎需要一个复合主键,但我建议添加一个 id 并将其设为主键,并在 cart_id、inventory_id 上添加一个唯一键 :

    CREATE TABLE public.cart_tb
    (
        cart_id_pk integer NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
        cart_id integer not null,
        inventory_id integer NOT NULL,
        desired_amount integer NOT NULL,
        row_status integer NOT NULL,
        CONSTRAINT "cart_PK" PRIMARY KEY (cart_id_pk),
        CONSTRAINT "cart_UK" UNIQUE (cart_id, inventory_id),
        CONSTRAINT "cart_inventory_FK" FOREIGN KEY (inventory_id)
            REFERENCES public.inventory_tb (inventory_id) MATCH SIMPLE
            ON UPDATE NO ACTION
            ON DELETE NO ACTION
    )
    

    如果不是,您可以将 cart_id、inventory_id 都设置为复合主键:

    CONSTRAINT "cart_PK" PRIMARY KEY (cart_id, inventory_id)
    

    在这种情况下,您不再需要唯一键。

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2017-02-18
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多