Mysql SQL Workbench对数据库进行反向工程-连接太多

Mysql SQL Workbench对数据库进行反向工程-连接太多,mysql,sql,mysql-workbench,erd,Mysql,Sql,Mysql Workbench,Erd,我创建了一个数据库,这里提供了代码。外键是在使用Alter Table命令创建后定义的 当反向工程和查看EER图时,一些表由多条关系线连接-有没有办法简单地将连接更改为一条描述1-1,1-M关系的线 EER链接在底部 DROP DATABASE IF EXISTS DasBus; CREATE DATABASE DasBus; use DasBus; BEGIN; CREATE TABLE Path ( PATH_NUM VARCHAR(10) PRIMARY KEY, START

我创建了一个数据库,这里提供了代码。外键是在使用Alter Table命令创建后定义的

当反向工程和查看EER图时,一些表由多条关系线连接-有没有办法简单地将连接更改为一条描述1-1,1-M关系的线

EER链接在底部

DROP DATABASE IF EXISTS DasBus;

CREATE DATABASE DasBus;
use DasBus;

BEGIN;

CREATE TABLE Path (
  PATH_NUM VARCHAR(10) PRIMARY KEY,
  START_POINT VARCHAR(10) NOT NULL,
  END_POINT VARCHAR(10) NOT NULL,
  INTER DECIMAL(8,2) NOT NULL,
  TOT_DURATION TIME NOT NULL,
  PATH_DELAY_NUM VARCHAR(10) NOT NULL,
  BUS_NUM VARCHAR(10) NOT NULL,
  PATH_STOP_NUM VARCHAR(10) NOT NULL,
  SCHED_NUM VARCHAR(10) not null
);

CREATE TABLE Path_Delay (
  PATH_DELAY_NUM VARCHAR(10) PRIMARY KEY,
  ISDELAYED BOOLEAN NOT NULL DEFAULT 0,
  PATH_NUM VARCHAR(10) NOT NULL,
  DELAY_NUM VARCHAR(10) NOT NULL
);

CREATE TABLE Delay (
  DELAY_NUM VARCHAR(10) PRIMARY KEY,
  DELAY_TIME INTEGER NOT NULL DEFAULT 0,
  DESCRIPTION VARCHAR(100) NOT NULL,
  PATH_DELAY_NUM VARCHAR(10) NOT NULL
);

CREATE TABLE Path_Stop (
  PATH_STOP_NUM VARCHAR(10) PRIMARY KEY,
  PATH_NUM VARCHAR(10) NOT NULL,
  STOP_NUM VARCHAR(10) NOT NULL,
  TIMEBETWEEN INTEGER NOT NULL
);

CREATE TABLE BusStop (
  STOP_NUM VARCHAR(10) PRIMARY KEY,
  STOP_NAME VARCHAR(100) NOT NULL,
  ISACTIVE BOOLEAN NOT NULL DEFAULT 1,
  STOPCONDITION VARCHAR(100) NOT NULL,
  PATH_STOP_NUM VARCHAR(10) NOT NULL,
  SCHED_NUM VARCHAR(10) not null
);

CREATE TABLE BusSchedule (
  SCHED_NUM VARCHAR(10) PRIMARY KEY,
  INTER TIME NOT NULL,
  START_TIME TIME NOT NULL,
  END_TIME TIME NOT NULL,
  PATH_NUM VARCHAR(10) NOT NULL,
  STOP_NUM VARCHAR(10) NOT NULL
);

CREATE TABLE Bus (
  BUS_NUM VARCHAR(10) PRIMARY KEY,
  BUS_CAPACITY INTEGER(4),
  DRIVER_NUM VARCHAR(10) NOT NULL,
  PATH_NUM VARCHAR(10) NOT NULL
);

CREATE TABLE Driver (
  DRIVER_NUM VARCHAR(10) PRIMARY KEY,
  DRIVER_LNAME VARCHAR(25) NOT NULL,
  DRIVER_FNAME VARCHAR(25) NOT NULL,
  DRIVER_STREET VARCHAR(25) NOT NULL,
  DRIVER_CITY VARCHAR(25) NOT NULL,
  DRIVER_ZIP CHAR(6),
  DRIVER_PHONE VARCHAR(15),
  BUS_NUM VARCHAR(10) NOT NULL
);

<p>ALTER TABLE PATH ADD CONSTRAINT Path1 FOREIGN KEY (BUS_NUM) REFERENCES Bus(BUS_NUM);
<p>ALTER TABLE PATH ADD CONSTRAINT Path2 FOREIGN KEY (PATH_DELAY_NUM) REFERENCES Path_Delay (PATH_DELAY_NUM);
<p>ALTER TABLE PATH ADD CONSTRAINT Path3 FOREIGN KEY (PATH_STOP_NUM) REFERENCES Path_Stop(PATH_STOP_NUM);
<p>ALTER TABLE PATH ADD CONSTRAINT Path4 FOREIGN KEY (SCHED_NUM) REFERENCES BusSchedule(SCHED_NUM);
<p>ALTER TABLE Path_Delay ADD CONSTRAINT Path_Delay1 FOREIGN KEY (PATH_NUM) REFERENCES Path(PATH_NUM);
<p>ALTER TABLE Path_Delay ADD CONSTRAINT Path_Delay2 FOREIGN KEY (DELAY_NUM) REFERENCES Delay(DELAY_NUM);
<p>ALTER TABLE DELAY ADD CONSTRAINT Delay1 FOREIGN KEY (PATH_DELAY_NUM) REFERENCES Path_Delay(PATH_DELAY_NUM);
<p>ALTER TABLE BusStop ADD CONSTRAINT BusStop1 FOREIGN KEY (PATH_STOP_NUM) REFERENCES Path_Stop(PATH_STOP_NUM);
<p>ALTER TABLE BusStop ADD CONSTRAINT BusStop2 FOREIGN KEY (SCHED_NUM) REFERENCES BusSchedule(SCHED_NUM);
<p>ALTER TABLE BUS ADD CONSTRAINT Bus1 FOREIGN KEY (DRIVER_NUM) REFERENCES Driver(DRIVER_NUM);
<p>ALTER TABLE BUS ADD CONSTRAINT Bus2 FOREIGN KEY (PATH_NUM) REFERENCES Path(PATH_NUM);
<p>ALTER TABLE DRIVER ADD CONSTRAINT Driver1 FOREIGN KEY (BUS_NUM) REFERENCES Bus(BUS_NUM);
<p>ALTER TABLE Path_Stop ADD CONSTRAINT Path_Stop1 FOREIGN KEY (PATH_NUM) REFERENCES Path(PATH_NUM);
<p>ALTER TABLE Path_Stop ADD CONSTRAINT Path_Stop2 FOREIGN KEY (STOP_NUM) REFERENCES BusStop(STOP_NUM);
<p>ALTER TABLE BusSchedule ADD CONSTRAINT BusSchedule1 FOREIGN KEY (STOP_NUM) REFERENCES BusStop (STOP_NUM);
<p>ALTER TABLE BusSchedule ADD CONSTRAINT BusSchedule2 FOREIGN KEY (PATH_NUM) REFERENCES Path (PATH_NUM);
如果存在DasBus,则删除数据库;
创建数据库DasBus;
使用DasBus;
开始;
创建表路径(
PATH_NUM VARCHAR(10)主键,
起始点VARCHAR(10)不为空,
端点VARCHAR(10)不为空,
小数点间(8,2)不为空,
TOT_持续时间不为空,
PATH_DELAY_NUM VARCHAR(10)不为空,
总线数VARCHAR(10)不为空,
PATH_STOP_NUM VARCHAR(10)不为空,
SCHED_NUM VARCHAR(10)不为空
);
创建表路径\u延迟(
PATH_DELAY_NUM VARCHAR(10)主键,
ISDELAYED BOOLEAN非空默认值0,
PATH_NUM VARCHAR(10)不为空,
DELAY_NUM VARCHAR(10)不为空
);
创建表延迟(
DELAY_NUM VARCHAR(10)主键,
延迟时间整数不为空默认值为0,
说明VARCHAR(100)不为空,
PATH_DELAY_NUM VARCHAR(10)不为空
);
创建表路径\u停止(
PATH_STOP_NUM VARCHAR(10)主键,
PATH_NUM VARCHAR(10)不为空,
STOP_NUM VARCHAR(10)不为空,
TIMEBETWEEN整数不为空
);
创建表总线停止(
STOP_NUM VARCHAR(10)主键,
STOP_NAME VARCHAR(100)不为空,
ISACTIVE布尔值不为空默认值1,
STOPCONDITION VARCHAR(100)不为空,
PATH_STOP_NUM VARCHAR(10)不为空,
SCHED_NUM VARCHAR(10)不为空
);
创建表BusSchedule(
SCHED_NUM VARCHAR(10)主键,
时间间隔不为空,
开始时间不为空,
结束时间时间不为空,
PATH_NUM VARCHAR(10)不为空,
STOP_NUM VARCHAR(10)不为空
);
创建表总线(
总线数VARCHAR(10)主键,
总线容量整数(4),
驱动程序\u NUM VARCHAR(10)不为空,
PATH_NUM VARCHAR(10)不为空
);
创建表驱动程序(
驱动程序\u NUM VARCHAR(10)主键,
驱动程序名称VARCHAR(25)不为空,
驱动程序名称VARCHAR(25)不为空,
DRIVER_STREET VARCHAR(25)非空,
驱动程序_CITY VARCHAR(25)不为空,
司机(6),
驾驶员电话号码:VARCHAR(15),
总线数VARCHAR(10)不为空
);
ALTER TABLE PATH ADD CONSTRAINT Path1外键(总线数)引用总线(总线数);
ALTER TABLE PATH ADD CONSTRAINT Path2外键(PATH_DELAY_NUM)引用PATH_DELAY(PATH_DELAY_NUM);
ALTER TABLE PATH ADD CONSTRAINT Path3外键(PATH_STOP_NUM)引用PATH_STOP(PATH_STOP_NUM);
ALTER TABLE PATH ADD CONSTRAINT Path4外键(SCHED_NUM)引用总线调度(SCHED_NUM);
ALTER TABLE Path_Delay ADD CONSTRAINT Path_Delay1外键(Path_NUM)引用Path(Path_NUM);
ALTER TABLE Path_Delay ADD CONSTRAINT Path_Delay2外键(Delay_NUM)引用Delay(Delay_NUM);
ALTER TABLE DELAY ADD CONSTRAINT Delay1外键(PATH_DELAY_NUM)引用PATH_DELAY(PATH_DELAY_NUM);
ALTER TABLE BUSTOP ADD CONSTRAINT BUSTOP1外键(PATH_STOP_NUM)引用PATH_STOP(PATH_STOP_NUM);
ALTER TABLE BUSTOP ADD CONSTRAINT BusStop2外键(SCHED_NUM)引用BUSSTABLE(SCHED_NUM);
ALTER TABLE BUS ADD CONSTRAINT Bus1外键(DRIVER_NUM)引用DRIVER(DRIVER_NUM);
ALTER TABLE BUS ADD CONSTRAINT Bus2外键(PATH_NUM)引用PATH(PATH_NUM);
ALTER TABLE DRIVER ADD CONSTRAINT Driver1外键(总线数)引用总线(总线数);
ALTER TABLE Path_Stop ADD CONSTRAINT Path_Stop1外键(Path_NUM)引用Path(Path_NUM);
ALTER TABLE Path\u Stop ADD CONSTRAINT Path\u Stop2外键(Stop\u NUM)引用BUSTOP(Stop\u NUM);
ALTER TABLE BUSCHEDULE ADD CONSTRAINT BUSCHEDULE1外键(STOP_NUM)引用BUSTOP(STOP_NUM);
ALTER TABLE BUSCHEDULE ADD CONSTRAINT BUSCHEDULE2外键(PATH_NUM)引用PATH(PATH_NUM);
EER图:


连接表的行是从表上定义的外键派生的。如果要减少外键的数量,则需要减少外键的数量

由于您的所有表都至少由两行连接,所以我想说您一般不完全理解外键和设置关系。让我们以
bus
driver
表为例

外键交叉引用了两个表。您可能想用这种方式表达一种
n:m
关系,即一个驾驶员可以驱动多条总线,但一条总线可能由多个驾驶员驱动

实现这种关系的正确方法是引入第三个表(我们称之为
bus\u drivers
),它至少包含
bus
drivers
表中的主键。这样的一张桌子叫做

您需要重新访问所有外键和表并修改它们,直到生成的图表符合您的期望。如果有这么多的
n:m
关系,可能需要添加相当多的关联表


在基于外键的关系的初始映射之后,您可以在mysql workbench中修改关系的可见性和基数。

该图不是ERD,而是表图。此外,FK约束不是ER关系。关系由表中的两个或多个实体键表示,例如
总线表中的
(总线数,驱动器数)
。FK约束强制执行逻辑域,它们不用于关联ER模型中的内容。MySQL Workbench甚至在使用n:m工具时自动创建关联表。