大工程 从0到1 数据治理 之数据模型和设计篇
我这里还是sample database classicmodels为案列,可以下载,我看 网上还没有类似的 案列,那就 从 0-1开始吧!
什么是数据模型设计?
我这里还是sample database classicmodels为案列,可以下载,我看 网上还没有类似的 案列,那就 从 0-1开始吧!
数据模型设计是在数据库和信息系统开发过程中的关键步骤之一,它涉及到对数据进行组织、建模和定义的过程。数据模型是一个抽象层次的概念,它描述了数据之间的关系、数据的结构、约束和操作。数据模型设计的主要目标是创建一个有效、灵活、可维护且易于理解的数据结构,以支持业务需求和系统功能。
数据模型设计通常包括以下几个方面:
实体: 表示现实世界中的一个独立的对象或概念,例如员工、订单、产品等。
属性: 描述实体的特征或属性,是实体的各个方面的数据项,例如员工的姓名、地址、工资等。
关系: 表示实体之间的连接或关联,它们描述了数据之间的依赖关系。关系可以是一对一、一对多或多对多的关系。
主键: 用于唯一标识表中每一行记录的字段,确保每个记录都有唯一的标识符。
外键: 是一个表中的字段,与另一表中的主键相对应,用于建立表之间的关系。
约束: 用于定义对数据的规则和限制,包括主键约束、唯一约束、默认值约束等。
范式: 一组规则,帮助设计师规范化数据结构,减少数据冗余和提高数据的一致性。
逆范式: 在某些情况下,为了提高查询性能,可以选择违反范式的原则,通过冗余数据来优化设计。
视图: 虚拟表,是从一个或多个基本表中导出的表,可以用于简化查询或隐藏底层数据结构的复杂性。
存储过程和触发器: 数据模型设计中也包括对于数据库中存储过程和触发器的设计,用于实现特定的业务逻辑和数据操作。
数据模型设计的结果通常以图形方式呈现,例如实体-关系图 (ER 图) 或其他概念建模工具。设计好的数据模型提供了一个蓝图,指导数据库的实际实现,确保数据库结构与业务需求一致,支持系统的正常运行和数据的有效管理。
我们拿 sample database classicmodels 举例?
创建表
/* Name: MySQL Sample Database classicmodels */ /* Create the database */ CREATE DATABASE IF NOT EXISTS classicmodels; /* Switch to the classicmodels database */ USE classicmodels; /* Drop existing tables */ DROP TABLE IF EXISTS productlines; DROP TABLE IF EXISTS products; DROP TABLE IF EXISTS offices; DROP TABLE IF EXISTS employees; DROP TABLE IF EXISTS customers; DROP TABLE IF EXISTS payments; DROP TABLE IF EXISTS orders; DROP TABLE IF EXISTS orderdetails; /* Create the tables */ CREATE TABLE productlines ( productLine varchar(50), textDescription varchar(4000) DEFAULT NULL, htmlDescription mediumtext, image mediumblob, PRIMARY KEY (productLine) ); CREATE TABLE products ( productCode varchar(15), productName varchar(70) NOT NULL, productLine varchar(50) NOT NULL, productScale varchar(10) NOT NULL, productVendor varchar(50) NOT NULL, productDescription text NOT NULL, quantityInStock smallint(6) NOT NULL, buyPrice decimal(10,2) NOT NULL, MSRP decimal(10,2) NOT NULL, PRIMARY KEY (productCode), FOREIGN KEY (productLine) REFERENCES productlines (productLine) ); CREATE TABLE offices ( officeCode varchar(10), city varchar(50) NOT NULL, phone varchar(50) NOT NULL, addressLine1 varchar(50) NOT NULL, addressLine2 varchar(50) DEFAULT NULL, state varchar(50) DEFAULT NULL, country varchar(50) NOT NULL, postalCode varchar(15) NOT NULL, territory varchar(10) NOT NULL, PRIMARY KEY (officeCode) ); CREATE TABLE employees ( employeeNumber int, lastName varchar(50) NOT NULL, firstName varchar(50) NOT NULL, extension varchar(10) NOT NULL, email varchar(100) NOT NULL, officeCode varchar(10) NOT NULL, reportsTo int DEFAULT NULL, jobTitle varchar(50) NOT NULL, PRIMARY KEY (employeeNumber), FOREIGN KEY (reportsTo) REFERENCES employees (employeeNumber), FOREIGN KEY (officeCode) REFERENCES offices (officeCode) ); CREATE TABLE customers ( customerNumber int, customerName varchar(50) NOT NULL, contactLastName varchar(50) NOT NULL, contactFirstName varchar(50) NOT NULL, phone varchar(50) NOT NULL, addressLine1 varchar(50) NOT NULL, addressLine2 varchar(50) DEFAULT NULL, city varchar(50) NOT NULL, state varchar(50) DEFAULT NULL, postalCode varchar(15) DEFAULT NULL, country varchar(50) NOT NULL, salesRepEmployeeNumber int DEFAULT NULL, creditLimit decimal(10,2) DEFAULT NULL, PRIMARY KEY (customerNumber), FOREIGN KEY (salesRepEmployeeNumber) REFERENCES employees (employeeNumber) ); CREATE TABLE payments ( customerNumber int, checkNumber varchar(50) NOT NULL, paymentDate date NOT NULL, amount decimal(10,2) NOT NULL, PRIMARY KEY (customerNumber,checkNumber), FOREIGN KEY (customerNumber) REFERENCES customers (customerNumber) ); CREATE TABLE orders ( orderNumber int, orderDate date NOT NULL, requiredDate date NOT NULL, shippedDate date DEFAULT NULL, status varchar(15) NOT NULL, comments text, customerNumber int NOT NULL, PRIMARY KEY (orderNumber), FOREIGN KEY (customerNumber) REFERENCES customers (customerNumber) ); CREATE TABLE orderdetails ( orderNumber int, productCode varchar(15) NOT NULL, quantityOrdered int NOT NULL, priceEach decimal(10,2) NOT NULL, orderLineNumber smallint(6) NOT NULL, PRIMARY KEY (orderNumber,productCode), FOREIGN KEY (orderNumber) REFERENCES orders (orderNumber), FOREIGN KEY (productCode) REFERENCES products (productCode) );
ER图
用 DBeaver 打开 ER图
帮助
主要需要了解下面五个函数
那大家在想[FOREIGN KEY有什么用,我这里做个实验就知道了,如下
介绍一些数据建模和设计领域工具
数据建模和设计领域涉及多个软件工具,用于创建、管理和优化数据模型,数据库设计,业务流程建模等。以下是一些常见的数据建模和设计软件:
ER/Studio:
功能: 实体-关系建模、数据库设计、数据架构管理。
特点: 多数据库支持,适用于大型企业。
IBM Data Architect:
功能: 数据建模、数据库设计、数据架构管理。
特点: 针对 IBM 数据库平台,全面的数据管理工具。
Microsoft Visio:
功能: 通用图形化建模工具,包括数据模型设计。
特点: 易用性高,可用于多种图形设计。
Oracle SQL Developer Data Modeler:
功能: 数据建模、数据库设计、逆向工程。
特点: 针对 Oracle 数据库设计的工具。
PowerDesigner:
功能: 数据建模、业务流程建模、应用程序设计。
特点: 多层次支持,企业架构管理,团队协作。
Toad Data Modeler:
功能: 数据建模、数据库设计、逆向工程。
特点: 多数据库支持,适用于数据库专业人士。
DeZign for Databases:
功能: 数据建模、数据库设计、逆向工程。
特点: 用户友好界面,支持多种数据库平台。
DbVisualizer:
功能: 数据建模、数据库设计、查询和管理。
特点: 通用数据库工具,支持多种数据库系统。
总结
好了,那么我请问大家有多少公司
会用 PRIMARY KEY (?), 和 FOREIGN KEY (?) REFERENCES customers (?),至少我的上一家公司没有