在我的情况下可以有外键重复值吗?

Can have in my case foreign key duplicated value?

在这种情况下可以有外键重复值吗?或者更好的是在列上有一个索引?

这是我的 table 结构:

CREATE TABLE customers(
id INT (10) NOT NULL,
name  VARCHAR (50) NOT NULL,
city  VARCHAR (50) NOT NULL
);

CREATE TABLE orders(
cus_id INT (10) NOT NULL ,
order_date  DATETIME NOT NULL
);


CREATE TABLE products(
id INT (5) NOT NULL,
product_name  VARCHAR(50) NOT NULL,
product_price INT(10) NOT NULL
);

但在 orderitems table(我存储订购产品的地方,客户可以订购多个产品,因此外键值 (cus_id) 可以重复)

CREATE TABLE ordered_items(
id INT (10) NOT NULL,
cus_id INT (10) NOT NULL,
product_id  INT(5) NOT NULL
);
ALTER TABLE customers ADD CONSTRAINT customer_id PRIMARY KEY ( id ) ;
ALTER TABLE orders ADD CONSTRAINT customers_id_fr FOREIGN KEY ( cus_id ) REFERENCES customers ( id );
ALTER TABLE ordered_items ADD CONSTRAINT ordered_items_fr FOREIGN KEY ( cus_id ) REFERENCES customers ( id );

编辑: 抱歉 ordered_items table 也有一个唯一的 ID 列。

是的! ordered_items 中可以有多个 cus_id 的值。但是,如果您将 cus_id 替换为 orders 中的 order_id,您的意图会更好,因此您的关系听起来像,


    a **customer** can have multiple *orders*, 
    an **order** can have multiple *order items*,
    and an **order item** can only have single *product*

你的 sql 看起来像这样


CREATE TABLE customers(
id INT (10) NOT NULL,
name  VARCHAR (50) NOT NULL,
city  VARCHAR (50) NOT NULL
);
ALTER TABLE customers ADD CONSTRAINT customer_id PRIMARY KEY ( id ) ;

CREATE TABLE orders(
id INT (5) NOT NULL,
cus_id INT (10) NOT NULL ,
order_date  DATETIME NOT NULL
);

ALTER TABLE orders ADD CONSTRAINT order_id PRIMARY KEY ( id ) ;
ALTER TABLE orders ADD CONSTRAINT customers_id_fr FOREIGN KEY ( cus_id ) REFERENCES customers ( id );

CREATE TABLE products(
id INT (5) NOT NULL,
product_name  VARCHAR(50) NOT NULL,
product_price DOUBLE NOT NULL
);

ALTER TABLE products ADD CONSTRAINT product_id PRIMARY KEY ( id ) ;

CREATE TABLE ordered_items(
id INT (10) NOT NULL,
order_id INT (10) NOT NULL,
product_id  INT(5) NOT NULL
);

ALTER TABLE ordered_items ADD CONSTRAINT ordrItm_id PRIMARY KEY ( id ) ;
ALTER TABLE ordered_items ADD CONSTRAINT ordrItm_order_frK FOREIGN KEY ( order_id ) REFERENCES orders ( id );
ALTER TABLE ordered_items ADD CONSTRAINT ordrItm_prd_frK FOREIGN KEY ( product_id) REFERENCES products ( id );