一次数据库的实践之二


前言

搁浅一周,开始第二部分的代码实现吧。

一次数据库的实践之一

在上一次实践中,讲述了待建数据库需保存的内容,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 零件信息表(零件号);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值