前言
搁浅一周,开始第二部分的代码实现吧。在上一次实践中,讲述了待建数据库需保存的内容,E-R图及实体关系。现在将在Navicat中以命令模式创建实体表。
一、创建实体表
1.创建表1
#创建表1_零件信息表
CREATE TABLE 零件信息表
(
零件号 VARCHAR(12) NOT NULL,
中文 VARCHAR(50),
英文 VARCHAR(80),
PRIMARY KEY (零件号)
) ENGINE = INNODB;
2.创建表2
#创建表2_FIG代码表
CREATE TABLE FIG代码
(
FIG VARCHAR(10) NOT NULL,
FK_FIG分类中文 VARCHAR(10),
细分装置 VARCHAR(50),
细分装置英文 VARCHAR(80),
PRIMARY KEY (FIG)
) ENGINE = INNODB;
3.创建表2.1
#创建表2.1_FIG分类标记
CREATE TABLE FIG分类标记
(
FIG分类中文 VARCHAR(50),
PRIMARY KEY (FIG分类中文)
) ENGINE = INNODB;
4.创建表2.2
#创建表2.2_零件_FIG表
#表2.2是因零件号与FIG为多对多的关系而设立
CREATE TABLE 零件_FIG表
(
FK_FIG_零件号 VARCHAR(50),
FK_FIG VARCHAR(10),
PRIMARY KEY(FK_FIG_零件号, FK_FIG)
) ENGINE = INNODB;
5.创建表3
#创建表3_产品代码
CREATE TABLE 产品代码
(
FK_首位数 INT (10) NOT NULL,
Product_Code VARCHAR(10) NOT NULL,
PD_中文 VARCHAR(50),
PD_英文 VARCHAR(80),
PRIMARY KEY (Product_Code)
) ENGINE = INNODB;
6.创建表3.1
#创建表3.1_产品代码组合
CREATE TABLE 产品代码组合
(
首位数 INT(2) NOT NULL,
PD_GP_中文 VARCHAR(50),
PD_GP_英文 VARCHAR(30),
PRIMARY KEY (首位数)
) ENGINE = INNODB;
7.创建表3.2
#创建表3.2_零件_PD_Code
CREATE TABLE 零件_PD_Code
(
FK_PD_零件号 VARCHAR(50),
FK_产品代码 VARCHAR(10),
PRIMARY KEY(FK_PD_零件号, FK_产品代码)
) ENGINE = INNODB;
二、表间约束
经过上述步骤,建立了各表。为了保证数的完整性需要建立各表间的约束。从操作对象,实际需求,最后考虑建立物理约束而非逻辑约束。
同时,需要数据插入后关联表能同步更新,使用MySQL的内置函数达到该功能。
约束方法
#表2建立外键_引用表2.1
ALTER TABLE FIG代码 ADD FOREIGN KEY(FK_FIG分类中文) REFERENCES FIG分类标记(FIG分类中文) ON UPDATE CASCADE;
#ON DELETE CASCADE;
#表2.2建立外键_引用表2和表1
ALTER TABLE 零件_FIG表 ADD FOREIGN KEY(FK_FIG_零件号) REFERENCES 零件信息表(零件号) ON UPDATE CASCADE;
ALTER TABLE 零件_FIG表 ADD FOREIGN KEY(FK_FIG) REFERENCES FIG代码(FIG) ON UPDATE CASCADE;
#表3建立外键_引用表3.1
ALTER TABLE 产品代码 ADD FOREIGN KEY(FK_首位数) REFERENCES 产品代码组合(首位数) ON UPDATE CASCADE;
#ON DELETE CASCADE;
#表3.2建立外键_引用表3和表1
ALTER TABLE 零件_PD_Code ADD FOREIGN KEY(FK_产品代码) REFERENCES 产品代码(Product_Code);
ALTER TABLE 零件_PD_Code ADD FOREIGN KEY(FK_PD_零件号) REFERENCES 零件信息表(零件号);
三、总结
上述过程先单独建立各表,随后根据表间关系,建立物理约束。本次实践过程,从描述存储内容,建立E-R图,建立实体关系。直到实现整个过程,耗时约一个月。
虽然中途不断修改实体关系,但好在最后实现了整个过程,终于不需要查询1个件,转圈2分钟!
实现过程
为了方便使用,在这里描述完整的实现过程
#创建表1_零件信息表
CREATE TABLE 零件信息表
(
零件号 VARCHAR(12) NOT NULL,
中文 VARCHAR(50),
英文 VARCHAR(80),
PRIMARY KEY (零件号)
) ENGINE = INNODB;
#创建表2_FIG代码表
CREATE TABLE FIG代码
(
FIG VARCHAR(10) NOT NULL,
FK_FIG分类中文 VARCHAR(10),
细分装置 VARCHAR(50),
细分装置英文 VARCHAR(80),
PRIMARY KEY (FIG)
) ENGINE = INNODB;
#创建表2.1_FIG分类标记
CREATE TABLE FIG分类标记
(
FIG分类中文 VARCHAR(50),
PRIMARY KEY (FIG分类中文)
) ENGINE = INNODB;
#创建表2.2_零件_FIG表
#表2.2是为相应零件号与FIG多对多的关系而新设置的
CREATE TABLE 零件_FIG表
(
FK_FIG_零件号 VARCHAR(50),
FK_FIG VARCHAR(10),
PRIMARY KEY(FK_FIG_零件号, FK_FIG)
) ENGINE = INNODB;
#创建表3_产品代码
CREATE TABLE 产品代码
(
FK_首位数 INT (10) NOT NULL,
Product_Code VARCHAR(10) NOT NULL,
PD_中文 VARCHAR(50),
PD_英文 VARCHAR(80),
PRIMARY KEY (Product_Code)
) ENGINE = INNODB;
#创建表3.1_产品代码组合
CREATE TABLE 产品代码组合
(
首位数 INT(2) NOT NULL,
PD_GP_中文 VARCHAR(50),
PD_GP_英文 VARCHAR(30),
PRIMARY KEY (首位数)
) ENGINE = INNODB;
#创建表3.2_零件_PD_Code
CREATE TABLE 零件_PD_Code
(
FK_PD_零件号 VARCHAR(50),
FK_产品代码 VARCHAR(10),
PRIMARY KEY(FK_PD_零件号, FK_产品代码)
) ENGINE = INNODB;
#表2建立外键_引用表2.1
ALTER TABLE FIG代码 ADD FOREIGN KEY(FK_FIG分类中文) REFERENCES FIG分类标记(FIG分类中文) ON UPDATE CASCADE;
#ON DELETE CASCADE;
#表2.2建立外键_引用表2和表1
ALTER TABLE 零件_FIG表 ADD FOREIGN KEY(FK_FIG_零件号) REFERENCES 零件信息表(零件号) ON UPDATE CASCADE;
ALTER TABLE 零件_FIG表 ADD FOREIGN KEY(FK_FIG) REFERENCES FIG代码(FIG) ON UPDATE CASCADE;
#表3建立外键_引用表3.1
ALTER TABLE 产品代码 ADD FOREIGN KEY(FK_首位数) REFERENCES 产品代码组合(首位数) ON UPDATE CASCADE;
#ON DELETE CASCADE;
#表3.2建立外键_引用表3和表1
ALTER TABLE 零件_PD_Code ADD FOREIGN KEY(FK_产品代码) REFERENCES 产品代码(Product_Code);
ALTER TABLE 零件_PD_Code ADD FOREIGN KEY(FK_PD_零件号) REFERENCES 零件信息表(零件号);