fro*_*bak 5 mysql database foreign-keys mysql-workbench
我正在 MySQL Workbench 中对数据库进行逆向工程,但它似乎没有导入或识别外键。这意味着我无法用它来绘制关系。
当我试图让它工作时,我正在使用几个表的片段,所以它并不复杂。
以下是我尝试使用的 2 个演示表:
CREATE TABLE users (
UserID varchar(32) NOT NULL,
OrgID varchar(6) NOT NULL,
RegionID int NULL,
LocationID int NULL,
Name nvarchar(60) NULL,
Crypt varchar(32) NULL,
Security int NULL,
Status int NULL,
PRIMARY KEY ( UserID ),
CONSTRAINT fk_OrgID_Users FOREIGN KEY (OrgID) REFERENCES Organisations(OrgID)
);
CREATE TABLE Organisations(
OrgID varchar(6) NOT NULL,
Name nvarchar(70) NOT NULL,
Address1 varchar(50) NULL,
Address2 varchar(50) NULL,
Address3 varchar(50) NULL,
Town varchar(20) NULL,
County varchar(20) NULL,
PostCode varchar(10) NULL,
NotificationEmail varchar(500) NOT NULL,
PRIMARY KEY ( OrgID )
)
Run Code Online (Sandbox Code Playgroud)
但在 MySQL Workbench 中,没有创建任何关系或外键。如果我查看表数据和外键选项卡,那里什么也没有?
我认为我正确创建了外键,那么有什么原因不导入它们呢?
在进一步的研究中,我需要做几件事才能使其发挥作用。
我必须确保从 MySQL 逆向工程得到的表被定义为 InnoDB。
我还必须从创建表命令中删除外键约束,并在创建表后创建外键,如下所示:
CREATE TABLE Users (
UserID varchar(32) NOT NULL,
OrgID varchar(6) NOT NULL,
RegionID int NULL,
LocationID int NULL,
Name nvarchar(60) NULL,
Crypt varchar(32) NULL,
Security int NULL,
Status int NULL,
PRIMARY KEY ( UserID )
) ENGINE=InnoDB;
CREATE TABLE Organisations(
OrgID varchar(6) NOT NULL,
Name nvarchar(70) NOT NULL,
Address1 varchar(50) NULL,
Address2 varchar(50) NULL,
Address3 varchar(50) NULL,
Town varchar(20) NULL,
County varchar(20) NULL,
PostCode varchar(10) NULL,
NotificationEmail varchar(500) NOT NULL,
PRIMARY KEY ( OrgID )
) ENGINE=InnoDB;
ALTER TABLE Users ADD CONSTRAINT fk_OrgID_Users FOREIGN KEY (OrgID) REFERENCES Organisations(OrgID);
Run Code Online (Sandbox Code Playgroud)
然后工作正常,关系在 MySQL Workbench 中可见并连接