mysql - 我正在尝试使用具有可变 FK 的模式创建表(订单)
问题描述
地区(地区代码,地区名称)
客户(CustCode、CustName、CustAdress、CustBalance、RegionCode)
EmployeeType ( EmployeeType , HourlyPayRate,)
员工(员工编号、员工姓名、员工地址、区域代码、员工类型)
产品(ProductCode、ProductName、UnitPrice、StockOnHand)
订单(OrderNo、CustCode、ProductCode、QtyOrdered、EmployeeNo)
主键以粗体显示。
区域由 RegionCode 唯一标识。每个客户都由一个 CustCode 唯一标识。每个客户可以订购多个产品,每个产品可以有多个客户。每个 Order 由一个员工处理,一个 Employee 可以处理多个 Order。
我很困惑,因为我不明白粗体的陈述是否表明它是一个复合键(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
表中具有引用表的列Customer
,Employee
并且Product
。
但是,您的代码有缺陷。您需要声明 column,然后是外键。声明外键不会自动创建列。
其他问题:
表声明用括号括起来
()
,而不是{}
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
对于所有这些列,您可能希望根据您的真实架构来修复它。
推荐阅读
- java - How to send list (primitive type or any class type) in SOAP request body
- wordpress - Wordpress theme development: Posts in multiple columns using Bootstrap 4
- arrays - 如何在双引号中键入数组的选定元素
- python - 记录模块示例代码重复消息 n 次 - 每次调用
- typescript - TypeScript - 基于鉴别器将联合类型映射到另一个联合类型的函数
- orientdb - OrientDB - 从两个不同的外部属性创建地图
- java - 将 crc 代码从 C 转换为 Java 会产生意想不到的结果
- python-3.x - 如何在课堂上访问或使用名称?Python
- azure-cognitive-search - 天蓝色搜索的索引结构
- react-native - 我在本机反应中收到无法访问的代码警告