我有一个名为Order_List的表,其中包含一个订单列表.每列包含一个外键,该外键引用订单表中订单的主键.我的问题是,声明这些外键的最佳方法是什么.使用MySQL Workbench我发现了两种方法……
方法#1
CREATE TABLE IF NOT EXISTS 'mydb'.'Order_List' (
'idOrder_List' INT UNSIGNED NOT NULL AUTO_INCREMENT ,
'orderID01' INT UNSIGNED NULL ,
'orderID02' INT UNSIGNED NULL ,
'orderID03' INT UNSIGNED NULL ,
'orderID04' INT UNSIGNED NULL ,
PRIMARY KEY ('idOrder_List') ,
INDEX 'fk_Order_List_1' ('orderID01' ASC, 'orderID02' ASC, 'orderID03' ASC, 'orderID04' ASC) ,
CONSTRAINT 'fk_Order_List_1'
FOREIGN KEY ('orderID01' , 'orderID02' , 'orderID03' , 'orderID04' )
REFERENCES 'mydb'.'Order' ('idOrder' , 'idOrder' , 'idOrder' , 'idOrder' )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
方法#2
CREATE TABLE IF NOT EXISTS 'mydb'.'Order_List' (
'idOrder_List' INT UNSIGNED NOT NULL AUTO_INCREMENT ,
'orderID01' INT UNSIGNED NULL ,
'orderID02' INT UNSIGNED NULL ,
'orderID03' INT UNSIGNED NULL ,
'orderID04' INT UNSIGNED NULL ,
PRIMARY KEY ('idOrder_List') ,
INDEX 'fk_Order_List_1' ('orderID01' ASC) ,
INDEX 'fk_Order_List_2' ('orderID02' ASC) ,
INDEX 'fk_Order_List_3' ('orderID03' ASC) ,
INDEX 'fk_Order_List_4' ('orderID04' ASC) ,
CONSTRAINT 'fk_Order_List_1'
FOREIGN KEY ('orderID01' )
REFERENCES 'mydb'.'Order' ('idOrder' )
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT 'fk_Order_List_2'
FOREIGN KEY ('orderID02' )
REFERENCES 'mydb'.'Order' ('idOrder' )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT 'fk_Order_List_3'
FOREIGN KEY ('orderID03' )
REFERENCES 'mydb'.'Order' ('idOrder' )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT 'fk_Order_List_4'
FOREIGN KEY ('orderID04' )
REFERENCES 'mydb'.'Order' ('idOrder' )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
第一种方法结合了声明.第二种方法将其拆分.哪一个更好?一个人在另一个人身上是否有任何固有的弱点?谢谢!