在谈到 ER 模型时,“映射”究竟是什么?
在数据模型的上下文中,术语“映射”是将数据模型转换为 SQL DDL 的过程的名称,该 DDL 可用于在 MySQL 等数据库管理系统中创建数据库模式, SQL Server、Oracle 等。
据我所知,您无法使用 Visio 和 LucidChart 等工具“映射”,因为这些工具不是为数据建模而设计的。它们旨在使绘制图表的过程机械化。 (一个合适的数据模型包含的不仅仅是图片)
例如,我使用您的 ER 图,使用免费的 NORMA 工具设计了一个对象-角色模型。下图显示:
对象-角色模型
逻辑模型(从对象-角色模型生成逻辑模型需要几毫秒。)
我从对象角色模型“映射”的 SQL DDL(将对象角色模型映射到 SQL DDL 需要几秒钟。)
我使用 SQL Server Management Studio,因此可以将 DDL 的 T-SQL 版本复制并粘贴到“新建查询”窗口中,并在几秒钟内生成数据库表。
这是对象-角色模型(分成页面)
这是逻辑模型(自动生成) 请注意,与您的模型不同,逻辑模型中只有一个“地址”表。
这是 MySQL 服务器的 SQL DDL(自动生成)
CREATE TABLE Brewery
(
breweryNr INT NOT NULL,
addressNr INT NOT NULL,
breweryName CHAR(63) NOT NULL,
CONSTRAINT Brewery_PK PRIMARY KEY(breweryNr)
);
CREATE TABLE Address
(
addressNr INT NOT NULL,
country CHAR(63) NOT NULL,
street CHAR(63) NOT NULL,
town CHAR(63) NOT NULL,
zipCode CHAR(63) NOT NULL,
CONSTRAINT Address_PK PRIMARY KEY(addressNr)
);
CREATE TABLE Beer
(
beerType CHAR(63) NOT NULL,
alcoholPercent INT NOT NULL,
beerAmountLitres CHAR(63) NOT NULL,
beerID CHAR(63) NOT NULL,
beerPrice CHAR(63) NOT NULL,
kegNr INT NOT NULL,
CONSTRAINT Beer_PK PRIMARY KEY(beerType)
);
CREATE TABLE BreweryMakesBeer
(
beerType CHAR(63) NOT NULL,
breweryNr INT NOT NULL,
CONSTRAINT BreweryMakesBeer_PK PRIMARY KEY(breweryNr, beerType)
);
CREATE TABLE Keg
(
kegNr INT NOT NULL,
kegState CHAR(63) NOT NULL,
CONSTRAINT Keg_PK PRIMARY KEY(kegNr)
);
CREATE TABLE Employee
(
employeeNr INT NOT NULL,
addressNr INT NOT NULL,
birthDate INT NOT NULL,
breweryNr INT NOT NULL,
firstName CHAR(63) NOT NULL,
lastName CHAR(63) NOT NULL,
salary DECIMAL(6,4) NOT NULL,
SSN CHAR(63) NOT NULL,
middleInt CHAR(63),
CONSTRAINT Employee_PK PRIMARY KEY(employeeNr)
);
CREATE TABLE Distributor
(
distributorNr INT NOT NULL,
brewingIngredientNr INT NOT NULL,
CONSTRAINT Distributor_PK PRIMARY KEY(distributorNr)
);
CREATE TABLE BrewingIngredient
(
brewingIngredientNr INT NOT NULL,
ingredientName CHAR(63) NOT NULL,
CONSTRAINT BrewingIngredient_PK PRIMARY KEY(brewingIngredientNr)
);
CREATE TABLE IngredientSupplier
(
ingredientSupplierNr INT NOT NULL,
addressNr INT NOT NULL,
CONSTRAINT IngredientSupplier_PK PRIMARY KEY(ingredientSupplierNr)
);
CREATE TABLE IngredientSupply
(
brewingIngredientNr INT NOT NULL,
ingredientSupplierNr INT NOT NULL,
CONSTRAINT IngredientSupply_PK PRIMARY KEY(brewingIngredientNr, ingredientSupplierNr)
);
ALTER TABLE Brewery ADD CONSTRAINT Brewery_FK FOREIGN KEY (addressNr) REFERENCES Address (addressNr) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE Beer ADD CONSTRAINT Beer_FK FOREIGN KEY (kegNr) REFERENCES Keg (kegNr) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE BreweryMakesBeer ADD CONSTRAINT BreweryMakesBeer_FK1 FOREIGN KEY (breweryNr) REFERENCES Brewery (breweryNr) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE BreweryMakesBeer ADD CONSTRAINT BreweryMakesBeer_FK2 FOREIGN KEY (beerType) REFERENCES Beer (beerType) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE Employee ADD CONSTRAINT Employee_FK1 FOREIGN KEY (breweryNr) REFERENCES Brewery (breweryNr) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE Employee ADD CONSTRAINT Employee_FK2 FOREIGN KEY (addressNr) REFERENCES Address (addressNr) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE Distributor ADD CONSTRAINT Distributor_FK FOREIGN KEY (brewingIngredientNr) REFERENCES BrewingIngredient (brewingIngredientNr) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE IngredientSupplier ADD CONSTRAINT IngredientSupplier_FK FOREIGN KEY (addressNr) REFERENCES Address (addressNr) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE IngredientSupply ADD CONSTRAINT IngredientSupply_FK1 FOREIGN KEY (brewingIngredientNr) REFERENCES BrewingIngredient (brewingIngredientNr) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE IngredientSupply ADD CONSTRAINT IngredientSupply_FK2 FOREIGN KEY (ingredientSupplierNr) REFERENCES IngredientSupplier (ingredientSupplierNr) ON DELETE RESTRICT ON UPDATE RESTRICT;