首页 > 解决方案 > 一张表中的两个外键 sqlite3

问题描述

我有 3 张桌子。

第三张表 shop_order 的问题(也许不是)

当我启动 python 脚本创建表时出现错误: sqlite3.OperationalError: near "cart_id": syntax error

我尝试删除字段 cart_id 或 customer_id 它有效。但是有两个外键它不起作用

CREATE TABLE account
(
    id integer primary key
);

CREATE TABLE shop_cart
(
    id integer primary key,
    
    FOREIGN KEY (owner_id) REFERENCES account (id)
);

CREATE TABLE shop_order
(
    id integer primary key,
    

    customer_id integer,
    FOREIGN KEY (customer_id) REFERENCES account (id),

    cart_id integer,
    FOREIGN KEY (cart_id) REFERENCES shop_cart (id)

);

标签: sqlite

解决方案


外键位于列定义之后:

CREATE TABLE shop_order
(
  id integer primary key,
  customer_id integer,
  cart_id integer,
  FOREIGN KEY (customer_id) REFERENCES account (id),
  FOREIGN KEY (cart_id) REFERENCES shop_cart (id)
);

但是,您应该重新考虑您的表格设计:

  • 表 shop_cart 有什么用?
  • 如果 shop_order 有一个 customer_id #1 和一个与 customer #2 相关的 cart_id,这意味着什么?
  • 为什么在一张表中称其为帐户,而在另一张表中称其为客户?保持一致。

推荐阅读