区域(RegionCode,RegionName)
  
  客户(客户代码,客户名称,客户地址,客户余额,地区代码)
  
  EmployeeType(EmployeeType,HourlyPayRate,)
  
  员工(EmployeeNo,EmployeeName,EmployeeAddress,RegionCode,
  EmployeeType)
  
  产品(ProductCode,ProductName,UnitPrice,StockOnHand)
  
  订单(OrderNo,CustCode,ProductCode,QtyOrdered,EmployeeNo)
  
  主键以粗体显示。
  
  区域由RegionCode唯一标识。每个客户都是
  由CustCode唯一标识。每个客户可以订购超过
  一个产品,每个产品可以有许多客户。每个订单是
  由一名雇员处理,并且一名雇员可以与多个雇员一起工作
  订购。


我很困惑,因为我不明白黑体字表明这是一个复合键(OrderNo,EmployeeNo)还是该问题分散了注意力?

这是我将如何从Order模式创建表的方法

Create Table Order{
     OrderNo INT (11) AUTO INCREMENT NOT NULL PRIMARY KEY,
     FOREIGN KEY CustCode REFERENCES Customer(CustCode)
     ON DELETE CASCADE
     ON UPDATE CASCADE,
     FOREIGN KEY ProductCode REFERENCES Product(ProductCode)
     ON DELETE CASCADE
     ON UPDATE CASCADE,
     QtyOrdered int (100),
     FOREIGN KEY EmployeeNo REFERENCES Employee(EmployeeNo)
     ON DELETE CASCADE
     ON UPDATE CASCADE
}


我想知道这是否是解决此问题的正确方法?

最佳答案

您对问题的理解还可以。您的老师希望您在Order表中具有引用表CustomerEmployeeProduct的列。

但是,您的代码有缺陷。您需要先声明该列,然后再声明外键。声明外键不会自动创建列。

其他问题:


表声明用括号()而不是{}括起来
Order是MySQL(和所有其他RDBMS)中的保留字;您需要用反引号将其括起来(更明智的解决方案是为该表选择另一个名称)


考虑:

Create Table `Order`(
    OrderNo INT (11) AUTO INCREMENT NOT NULL PRIMARY KEY,
    CustCode INT,
    ProductCode INT,
    QtyOrdered INT(100),
    EmployeeNo INT,
    FOREIGN KEY CustCode REFERENCES Customer(CustCode)
        ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY ProductCode REFERENCES Product(ProductCode)
        ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY EmployeeNo REFERENCES Employee(EmployeeNo)
        ON DELETE CASCADE ON UPDATE CASCADE
);


注意:外键列必须与引用列具有相同的数据类型;对于所有这些列,我都假定为INT,您可能想根据实际架构对其进行修复。

09-11 18:04