数据模型与数据库设计技术教程_第1页
数据模型与数据库设计技术教程_第2页
数据模型与数据库设计技术教程_第3页
数据模型与数据库设计技术教程_第4页
数据模型与数据库设计技术教程_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据模型与数据库设计技术教程数据模型基础1.数据模型的概念数据模型是描述数据、数据关系、数据操作和数据语义的抽象概念。它是数据库设计的核心,用于定义数据的结构和行为。数据模型帮助我们理解数据如何在系统中存储、关联和操作,是数据库设计的蓝图。1.1例子假设我们有一个图书管理系统,需要存储书籍信息、作者信息以及书籍和作者之间的关系。我们可以定义以下实体和属性:书籍实体:包含书籍ID、书名、出版日期、价格等属性。作者实体:包含作者ID、姓名、国籍等属性。书籍-作者关系:表示一本书可以有多个作者,一个作者可以写多本书。2.实体关系模型ER模型实体关系模型(Entity-RelationshipModel,简称ER模型)是一种用于描述现实世界中实体及其之间关系的数据模型。ER模型使用实体、属性和关系三个基本概念来描述数据。2.1ER模型的构成实体:现实世界中的对象,如“学生”、“课程”。属性:描述实体的特征,如“学生”的“学号”、“姓名”。关系:实体之间的联系,如“学生”与“课程”之间的“选课”关系。2.2ER图示例erDiagram

Student{

intID

stringName

stringMajor

}

Course{

intID

stringTitle

intCredits

}

Student||--o{Course:"takes"

Course||--o{Student:"istakenby"3.数据模型的类型数据模型可以分为三种主要类型:概念数据模型、逻辑数据模型和物理数据模型。概念数据模型:用于描述数据的高层次视图,如ER模型。逻辑数据模型:定义数据的结构和关系,如关系模型、网状模型、层次模型。物理数据模型:描述数据在存储介质上的实际存储方式。3.1关系模型示例关系模型是最常用的数据模型,它使用表格结构来表示实体和实体之间的关系。每个表格代表一个实体,表格中的行代表实体的实例,列代表实体的属性。--创建书籍表

CREATETABLEBooks(

BookIDintPRIMARYKEY,

Titlevarchar(255)NOTNULL,

PublicationDatedate,

Pricedecimal

);

--创建作者表

CREATETABLEAuthors(

AuthorIDintPRIMARYKEY,

Namevarchar(255)NOTNULL,

Nationalityvarchar(100)

);

--创建书籍-作者关系表

CREATETABLEBookAuthors(

BookIDint,

AuthorIDint,

PRIMARYKEY(BookID,AuthorID),

FOREIGNKEY(BookID)REFERENCESBooks(BookID),

FOREIGNKEY(AuthorID)REFERENCESAuthors(AuthorID)

);4.数据模型设计原则设计数据模型时,应遵循以下原则:一致性:确保数据模型反映业务规则和需求。完整性:定义数据完整性约束,如主键、外键、唯一性约束。规范化:通过规范化过程减少数据冗余和异常,提高数据一致性和准确性。可扩展性:设计应考虑未来可能的业务变化和数据需求。4.1规范化示例假设我们有以下一个非规范化的表:CREATETABLEBookDetails(

BookIDint,

Titlevarchar(255),

AuthorNamevarchar(255),

PublicationDatedate,

Pricedecimal,

PRIMARYKEY(BookID)

);这个表中,AuthorName字段直接存储在BookDetails表中,导致数据冗余和更新异常。通过规范化,我们可以将AuthorName字段移到一个单独的Authors表中,并在BookDetails表中使用外键AuthorID来引用Authors表。--创建规范化后的书籍表

CREATETABLEBooks(

BookIDintPRIMARYKEY,

Titlevarchar(255)NOTNULL,

PublicationDatedate,

Pricedecimal

);

--创建规范化后的作者表

CREATETABLEAuthors(

AuthorIDintPRIMARYKEY,

Namevarchar(255)NOTNULL

);

--创建规范化后的书籍-作者关系表

CREATETABLEBookAuthors(

BookIDint,

AuthorIDint,

PRIMARYKEY(BookID,AuthorID),

FOREIGNKEY(BookID)REFERENCESBooks(BookID),

FOREIGNKEY(AuthorID)REFERENCESAuthors(AuthorID)

);通过规范化,我们避免了数据冗余,确保了数据的完整性和一致性。数据库设计过程5.需求分析5.1原理需求分析是数据库设计的第一步,主要目的是理解业务需求,收集数据需求和处理需求。这一步骤需要与业务人员紧密合作,确保设计的数据库能够满足业务的需要。5.2内容业务理解:理解业务流程,确定数据处理的目标。数据需求收集:识别需要存储的数据类型,数据的来源和数据的使用方式。处理需求收集:了解数据处理的频率,数据的更新方式,以及数据的访问模式。5.3示例假设我们正在为一家在线书店设计数据库,需求分析阶段可能包括以下步骤:业务理解:书店需要存储书籍信息,用户信息,订单信息等。数据需求收集:书籍信息包括书名,作者,出版社,价格,库存等;用户信息包括用户名,密码,地址,电话等;订单信息包括订单号,用户ID,书籍ID,数量,订单日期等。处理需求收集:书籍信息需要定期更新,用户信息可能在用户注册或修改信息时更新,订单信息在用户下单时更新。数据访问模式可能包括用户查询书籍信息,管理员查看订单信息等。6.概念设计6.1原理概念设计阶段主要关注数据的抽象表示,使用实体关系模型(ER模型)来描述数据实体,实体之间的关系,以及实体的属性。6.2内容实体识别:识别业务中的实体,如用户,书籍,订单等。关系定义:定义实体之间的关系,如用户与订单之间的“创建”关系,书籍与订单之间的“包含”关系。属性确定:确定每个实体的属性,如用户实体的属性可能包括用户名,密码,地址等。6.3示例继续在线书店的例子,概念设计阶段可能创建以下ER模型:实体:用户,书籍,订单关系:用户与订单之间存在“创建”关系,书籍与订单之间存在“包含”关系。属性:用户:用户名,密码,地址,电话书籍:书名,作者,出版社,价格,库存订单:订单号,用户ID,书籍ID,数量,订单日期7.逻辑设计7.1原理逻辑设计阶段将概念设计转换为特定数据库管理系统(DBMS)的逻辑结构,如关系数据库模型。这包括确定数据表,字段,以及表之间的关系。7.2内容表设计:根据ER模型设计数据库表。字段定义:定义每个表的字段,包括字段类型,是否可为空等。关系实现:通过外键等机制实现表之间的关系。7.3示例基于ER模型,逻辑设计阶段可能设计以下数据库表:表:Users,Books,Orders字段定义:Users:UserID(INT,主键,自增),Username(VARCHAR(50)),Password(VARCHAR(50)),Address(VARCHAR(100)),Phone(VARCHAR(20))Books:BookID(INT,主键,自增),Title(VARCHAR(100)),Author(VARCHAR(50)),Publisher(VARCHAR(50)),Price(DECIMAL(5,2)),Stock(INT)Orders:OrderID(INT,主键,自增),UserID(INT,外键),BookID(INT,外键),Quantity(INT),OrderDate(DATE)关系实现:Orders表中的UserID和BookID字段作为外键,分别引用Users表的UserID和Books表的BookID。8.物理设计8.1原理物理设计阶段关注数据库在物理存储设备上的布局,包括索引,存储结构,以及性能优化策略。8.2内容索引设计:为提高查询效率,设计索引。存储结构:确定数据的存储方式,如分区,压缩等。性能优化:考虑硬件配置,优化数据库性能。8.3示例在物理设计阶段,我们可能为Orders表的UserID和OrderDate字段创建索引,以加速基于用户和日期的查询:--创建索引

CREATEINDEXidx_Orders_UserIDONOrders(UserID);

CREATEINDEXidx_Orders_OrderDateONOrders(OrderDate);此外,我们可能选择将Books表的Stock字段存储为压缩格式,以节省存储空间:--创建压缩表

CREATETABLEBooks(

BookIDINTPRIMARYKEYAUTO_INCREMENT,

TitleVARCHAR(100),

AuthorVARCHAR(50),

PublisherVARCHAR(50),

PriceDECIMAL(5,2),

StockINT

)ROW_FORMAT=COMPRESSED;以上步骤共同构成了数据库设计的过程,从理解需求到实现高效的数据存储和查询。数据库规范化9.规范化理论数据库规范化是一种设计过程,用于减少数据冗余和提高数据完整性。通过一系列的规范化形式,数据库设计者可以确保数据的一致性和减少更新异常。规范化的目标是将数据组织成多个相关联的表,每个表包含一组相关的信息,从而提高数据库的效率和可靠性。10.第一范式1NF10.1原理第一范式(1NF)要求数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即确保列的原子性。这有助于消除重复数据,确保每个记录的唯一性。10.2内容原子性:每个列都是不可分割的数据项。唯一性:每行数据都是唯一的,没有重复行。10.3示例假设我们有以下一个非规范化的表:IDNameSubjects1张三数学,英语2李四物理,化学问题Subjects列包含多个值,违反了1NF的原子性原则。解决方案将表拆分为两个表,确保每个列都是原子的:StudentsIDName1张三2李四SubjectsStudentIDSubject1数学1英语2物理2化学11.第二范式2NF11.1原理第二范式(2NF)要求表必须满足1NF,并且所有非主键列完全依赖于整个主键,而不是主键的一部分或任何其他列。11.2内容依赖性:非主键列必须完全依赖于整个主键。11.3示例假设我们有以下一个表,它满足1NF但不满足2NF:CoursesCourseIDCourseNameTeacherIDTeacherName1数学101王老师2英语102李老师1数学101王老师问题TeacherName依赖于TeacherID,而不是整个主键CourseID。解决方案将表拆分为满足2NF的两个表:CoursesCourseIDCourseName1数学2英语TeachersTeacherIDTeacherName101王老师102李老师Course_TeachersCourseIDTeacherID11012102110112.第三范式3NF12.1原理第三范式(3NF)要求表必须满足2NF,并且所有非主键列直接依赖于主键,而不是依赖于其他非主键列。12.2内容直接依赖:非主键列直接依赖于主键,避免传递依赖。12.3示例假设我们有以下一个表,它满足2NF但不满足3NF:TeachersTeacherIDTeacherNameDepartment101王老师数学系102李老师英语系问题Department依赖于TeacherID,但也可以通过TeacherName间接获取,存在传递依赖。解决方案将表拆分为满足3NF的两个表:TeachersTeacherIDTeacherName101王老师102李老师DepartmentsDepartmentIDDepartmentName1数学系2英语系Teacher_DepartmentsTeacherIDDepartmentID1011102213.BC范式13.1原理BC范式(Boyce-Codd范式)要求表必须满足3NF,并且所有非主键列都必须完全依赖于每个候选键,而不仅仅是依赖于主键。13.2内容候选键依赖:非主键列依赖于候选键,避免部分依赖和传递依赖。13.3示例假设我们有以下一个表,它满足3NF但不满足BCNF:CoursesCourseIDCourseNameDepartmentID1数学12英语23物理1问题DepartmentID和CourseName之间存在部分依赖。解决方案将表拆分为满足BCNF的两个表:CoursesCourseIDCourseName1数学2英语3物理DepartmentsDepartmentIDDepartmentName1数学系2英语系Course_DepartmentsCourseIDDepartmentID112231数据库优化14.查询优化查询优化是数据库管理系统(DBMS)中的一个关键过程,它涉及到如何选择最有效的查询执行计划。优化的目标是减少查询的响应时间,降低系统资源的消耗,提高数据库的整体性能。查询优化器通常会考虑多种因素,包括数据的分布、索引的存在、表的大小等,以确定最佳的查询路径。14.1示例:使用EXPLAIN分析查询计划--创建一个示例表

CREATETABLEemployees(

idINTPRIMARYKEY,

nameVARCHAR(50),

departmentVARCHAR(50),

salaryINT

);

--插入一些数据

INSERTINTOemployees(id,name,department,salary)

VALUES(1,'张三','销售部',5000),

(2,'李四','技术部',6000),

(3,'王五','销售部',5500),

(4,'赵六','技术部',6500);

--使用EXPLAIN分析查询计划

EXPLAINSELECT*FROMemployeesWHEREdepartment='销售部';在上述示例中,我们首先创建了一个employees表,并插入了几条记录。然后,我们使用EXPLAIN命令来分析查询计划,这可以帮助我们理解数据库如何执行查询,以及是否有索引被使用。15.索引设计索引设计是数据库优化中的另一个重要方面。索引可以显著提高数据检索的速度,但同时也会占用额外的存储空间,并可能影响写操作的性能。因此,设计索引时需要权衡读写性能和存储成本。15.1示例:创建和使用索引--创建索引

CREATEINDEXidx_departmentONemployees(department);

--使用索引进行查询

SELECT*FROMemployeesWHEREdepartment='销售部';在这个例子中,我们为employees表的department列创建了一个索引idx_department。当执行基于department列的查询时,数据库可以使用这个索引来加速数据检索。16.存储过程优化存储过程是预编译的SQL语句集合,它们可以提高应用程序的性能和安全性。然而,不当的存储过程设计可能会导致性能瓶颈。优化存储过程包括减少网络往返次数、避免游标和循环、使用变量而不是常量等策略。16.1示例:优化存储过程--创建一个简单的存储过程

DELIMITER//

CREATEPROCEDUREGetEmployeeByName(INempNameVARCHAR(50))

BEGIN

SELECT*FROMemployeesWHEREname=empName;

END//

DELIMITER;

--调用存储过程

CALLGetEmployeeByName('张三');在这个例子中,我们创建了一个名为GetEmployeeByName的存储过程,它接受一个员工姓名作为参数,并返回该员工的信息。优化存储过程可能包括确保其中的查询语句被优化,以及避免在存储过程中使用复杂的逻辑,如循环和条件语句。17.数据库性能监控数据库性能监控是持续评估数据库性能并识别性能瓶颈的过程。这通常涉及到收集和分析数据库的性能指标,如查询响应时间、CPU使用率、磁盘I/O等。性能监控工具可以帮助数据库管理员及时发现和解决问题,确保数据库的稳定运行。17.1示例:使用性能监控工具--使用MySQL的性能监控工具

SHOWGLOBALSTATUSLIKE'Innodb_row_lock_time';在这个例子中,我们使用了MySQL的SHOWGLOBALSTATUS命令来查看Innodb_row_lock_time的值,这是一个性能指标,用于监控InnoDB存储引擎的行级锁等待时间。通过监控这类指标,数据库管理员可以及时发现锁竞争等问题,从而采取措施优化数据库性能。以上是数据库优化中查询优化、索引设计、存储过程优化和数据库性能监控的基本原理和示例。在实际应用中,这些策略需要根据具体的数据库环境和应用需求进行调整和优化。数据库安全与备份18.数据库安全概述数据库安全是确保数据的机密性、完整性和可用性的关键。它涉及多个层面的保护措施,从物理安全到逻辑安全,确保只有授权用户可以访问数据,同时防止数据被篡改或丢失。数据库安全的重要性在于保护敏感信息,如个人数据、财务记录和商业机密,不受未授权访问、恶意攻击或意外损坏。18.1安全目标机密性:确保数据只被授权用户访问。完整性:防止数据被未授权修改。可用性:确保数据在需要时可以被访问。19.用户权限管理用户权限管理是数据库安全的核心组成部分,它定义了用户可以对数据库执行的操作类型。通过设置不同的权限级别,可以控制用户对数据的读取、写入、修改和删除等操作。19.1权限类型SELECT:允许用户查询数据。INSERT:允许用户向表中添加新数据。UPDATE:允许用户修改现有数据。DELETE:允许用户删除数据。CREATE:允许用户创建新的数据库对象,如表、视图等。DROP:允许用户删除数据库对象。GRANTOPTION:允许用户将权限授予其他用户。19.2示例:MySQL中的权限管理--创建用户

CREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';

--授予权限

GRANTSELECT,INSERT,UPDATEONdatabase_name.*TO'newuser'@'localhost';

--撤销权限

REVOKEINSERTONdatabase_name.*FROM'newuser'@'localhost';20.数据加密技术数据加密是将数据转换为密文,以防止未授权访问。在数据库中,加密可以应用于存储的数据、传输的数据或两者。加密技术包括对称加密、非对称加密和哈希函数。20.1对称加密对称加密使用相同的密钥进行加密和解密。它速度快,但密钥管理是挑战。20.2非对称加密非对称加密使用一对密钥,公钥用于加密,私钥用于解密。它更安全,但速度较慢。20.3哈希函数哈希函数将任意长度的数据转换为固定长度的输出,通常用于验证数据的完整性。20.4示例:使用AES加密importpyAesCrypt

#加密文件

bufferSize=64*1024

password="password"

pyAesCrypt.encryptFile("data.txt","data.txt.aes",password,bufferSize)

#解密文件

pyAesCrypt.decryptFile("data.txt.aes","data_out.txt",password,bufferSize)21.数据库备份与恢复策略数据库备份是创建数据库当前状态的副本,以便在数据丢失或损坏时可以恢复。备份策略应考虑备份频率、备份类型(全备份、增量备份、差异备份)和存储位置。21.1备份类型全备份:备份所有数据。增量备份:仅备份自上次备份以来更改的数据。差异备份:备份自上次全备份以来更改的所有数据。21.2恢复策略恢复策略应包括如何在数据丢失或损坏时使用备份文件。这可能涉及恢复到特定时间点或恢复最新的数据状态。21.3示例:使用mysqldump进行备份#全备份

mysqldump-uroot-pdatabase_name>backup.sql

#恢复

mysql-uroot-pdatabase_name<backup.sql21.4增量备份示例#初始全备份

innobackupex--user=root--password=password--no-timestamp--defaults-file=/etc/f/backup

#增量备份

innobackupex--user=root--password=password--no-timestamp--defaults-file=/etc/f--incremental/backup

#恢复

innobackupex--apply-log/backup

innobackupex--user=root--password=password--no-timestamp--defaults-file=/etc/f--incremental-apply-log/backup以上示例展示了如何在MySQL中创建用户并管理其权限,如何使用Python的pyAesCrypt库进行数据加密,以及如何使用mysqldump和innobackupex工具进行数据库的全备份、增量备份和恢复。这些操作是数据库安全与备份策略中的关键步骤,确保数据的安全性和可恢复性。数据库设计案例分析22.电子商务数据库设计22.11.业务需求分析电子商务系统需要处理商品信息、用户信息、订单信息、支付信息等。设计数据库时,首先明确这些实体及其属性,以及实体之间的关系。商品:商品ID、名称、描述、价格、库存、分类等。用户:用户ID、姓名、地址、联系方式、账户余额等。订单:订单ID、用户ID、商品ID、数量、总价、订单状态等。支付:支付ID、订单ID、支付方式、支付状态、支付时间等。22.22.实体关系图(ER图)erDiagram

Product||--o{Order:"ordered"

Order||--o{OrderDetail:"contains"

Order||--|{Payment:"paid_by"

User||--|{Order:"placed"

User||--|{Payment:"made"

Product{

intproduct_id

stringname

stringdescription

decimalprice

intstock

stringcategory

}

Order{

intorder_id

intuser_id

decimaltotal_price

stringstatus

}

OrderDetail{

intorder_id

intproduct_id

intquantity

}

Payment{

intpayment_id

intorder_id

stringpayment_method

stringstatus

datetimepayment_time

}

User{

intuser_id

stringname

stringaddress

stringcontact

decimalaccount_balance

}22.33.数据表设计商品表(Product)字段名数据类型描述product_idINT商品IDnameVARCHAR商品名称descriptionTEXT商品描述priceDECIMAL商品价格stockINT库存数量categoryVARCHAR商品分类用户表(User)字段名数据类型描述user_idINT用户IDnameVARCHAR用户姓名addressVARCHAR用户地址contactVARCHAR联系方式account_balanceDECIMAL账户余额订单表(Order)字段名数据类型描述order_idINT订单IDuser_idINT用户IDtotal_priceDECIMAL订单总价statusVARCHAR订单状态订单详情表(OrderDetail)字段名数据类型描述order_idINT订单IDproduct_idINT商品IDquantityINT商品数量支付表(Payment)字段名数据类型描述payment_idINT支付IDorder_idINT订单IDpayment_methodVARCHAR支付方式statusVARCHAR支付状态payment_timeDATETIME支付时间22.44.SQL创建表语句示例--创建商品表

CREATETABLEProduct(

product_idINTAUTO_INCREMENTPRIMARYKEY,

nameVARCHAR(255)NOTNULL,

descriptionTEXT,

priceDECIMAL(10,2)NOTNULL,

stockINTNOTNULL,

categoryVARCHAR(50)

);

--创建用户表

CREATETABLEUser(

user_idINTAUTO_INCREMENTPRIMARYKEY,

nameVARCHAR(255)NOTNULL,

addressVARCHAR(255),

contactVARCHAR(20),

account_balanceDECIMAL(10,2)DEFAULT0

);

--创建订单表

CREATETABLEOrder(

order_idINTAUTO_INCREMENTPRIMARYKEY,

user_idINTNOTNULL,

total_priceDECIMAL(10,2)NOTNULL,

statusVARCHAR(20)NOTNULL,

FOREIGNKEY(user_id)REFERENCESUser(user_id)

);

--创建订单详情表

CREATETABLEOrderDetail(

order_idINTNOTNULL,

product_idINTNOTNULL,

quantityINTNOTNULL,

PRIMARYKEY(order_id,product_id),

FOREIGNKEY(order_id)REFERENCESOrder(order_id),

FOREIGNKEY(product_id)REFERENCESProduct(product_id)

);

--创建支付表

CREATETABLEPayment(

payment_idINTAUTO_INCREMENTPRIMARYKEY,

order_idINTNOTNULL,

payment_methodVARCHAR(50)NOTNULL,

statusVARCHAR(20)NOTNULL,

payment_timeDATETIMENOTNULL,

FOREIGNKEY(order_id)REFERENCESOrder(order_id)

);22.55.数据操作示例插入商品信息INSERTINTOProduct(name,description,price,stock,category)

VALUES('iPhone13','AppleiPhone13128GB',7999.00,100,'Electronics');插入用户信息INSERTINTOUser(name,address,contact,account_balance)

VALUES('张三','北京市朝阳区',,10000.00);创建订单INSERTINTOOrder(user_id,total_price,status)

VALUES(1,7999.00,'Pending');插入订单详情INSERTINTOOrderDetail(order_id,product_id,quantity)

VALUES(1,1,1);完成支付INSERTINTOPayment(order_id,payment_method,status,payment_time)

VALUES(1,'CreditCard','Completed',NOW());23.社交媒体数据库设计23.11.业务需求分析社交媒体系统需要处理用户信息、好友关系、动态、评论、点赞等。设计数据库时,需考虑用户、动态、评论、点赞等实体及其关系。用户:用户ID、姓名、性别、生日、联系方式等。动态:动态ID、用户ID、内容、发布时间等。评论:评论ID、动态ID、用户ID、内容、发布时间等。点赞:点赞ID、动态ID、用户ID、点赞时间等。23.22.实体关系图(ER图)erDiagram

User||--o{Friend:"is_friend_of"

User||--o{Post:"posted"

Post||--o{Comment:"has_comment"

Post||--o{Like:"has_like"

User{

intuser_id

stringname

stringgender

datebirthday

stringcontact

}

Post{

intpost_id

intuser_id

stringcontent

datetimepost_time

}

Comment{

intcomment_id

intpost_id

intuser_id

stringcontent

datetimecomment_time

}

Like{

intlike_id

intpost_id

intuser_id

datetimelike_time

}

Friend{

intuser_id

intfriend_id

}23.33.数据表设计用户表(User)字段名数据类型描述user_idINT用户IDnameVARCHAR用户姓名genderVARCHAR性别birthdayDATE生日contactVARCHAR联系方式动态表(Post)字段名数据类型描述post_idINT动态IDuser_idINT用户IDcontentTEXT动态内容post_timeDATETIME发布时间评论表(Comment)字段名数据类型描述comment_idINT评论IDpost_idINT动态IDuser_idINT用户IDcontentTEXT评论内容comment_timeDATETIME评论时间点赞表(Like)字段名数据类型描述like_idINT点赞IDpost_idINT动态IDuser_idINT用户IDlike_timeDATETIME点赞时间好友关系表(Friend)字段名数据类型描述user_idINT用户IDfriend_idINT好友ID23.44.SQL创建表语句示例--创建用户表

CREATETABLEUser(

user_idINTAUTO_INCREMENTPRIMARYKEY,

nameVARCHAR(255)NOTNULL,

genderVARCHAR(10),

birthdayDATE,

contactVARCHAR(20)

);

--创建动态表

CREATETABLEPost(

post_idINTAUTO_INCREMENTPRIMARYKEY,

user_idINTNOTNULL,

contentTEXT,

post_timeDATETIMENOTNULL,

FOREIGNKEY(user_id)REFERENCESUser(user_id)

);

--创建评论表

CREATETABLEComment(

comment_idINTAUTO_INCREMENTPRIMARYKEY,

post_idINTNOTNULL,

user_idINTNOTNULL,

contentTEXT,

comment_timeDATETIMENOTNULL,

FOREIGNKEY(post_id)REFERENCESPost(post_id),

FOREIGNKEY(user_id)REFERENCESUser(user_id)

);

--创建点赞表

CREATETABLELike(

like_idINTAUTO_INCREMENTPRIMARYKEY,

post_idINTNOTNULL,

user_idINTNOTNULL,

like_timeDATETIMENOTNULL,

FOREIGNKEY(post_id)REFERENCESPost(post_id),

FOREIGNKEY(user_id)REFERENCESUser(user_id)

);

--创建好友关系表

CREATETABLEFriend(

user_idINTNOTNULL,

friend_idINTNOTNULL,

PRIMARYKEY(user_id,friend_id),

FOREIGNKEY(user_id)REFERENCESUser(user_id),

FOREIGNKEY(friend_id)REFERENCESUser(user_id)

);23.55.数据操作示例插入用户信息INSERTINTOUser(name,gender,birthday,contact)

VALUES('李四','Male','1990-01-01',);发布动态INSERTINTOPost(user_id,content,post_time)

VALUES(1,'今天天气真好!',NOW());插入评论INSERTINTOComment(post_id,user_id,content,comment_time)

VALUES(1,2,'同意,阳光明媚!',NOW());插入点赞INSERTINTOLike(post_id,user_id,like_time)

VALUES(1,2,NOW());建立好友关系INSERTINTOFriend(user_id,friend_id)

VALUES(1,2);24.金融系统数据库设计24.11.业务需求分析金融系统需要处理账户信息、交易记录、用户信息、贷款信息等。设计数据库时,需考虑账户、交易、用户、贷款等实体及其关系。账户:账户ID、用户ID、账户类型、余额、开户日期等。交易:交易ID、账户ID、交易类型、金额、交易时间等。用户:用户ID、姓名、联系方式、地址等。贷款:贷款ID、账户ID、贷款金额、贷款期限、还款状态等。24.22.实体关系图(ER图)erDiagram

Account||--o{Transaction:"has_transaction"

Account||--|{Loan:"has_loan"

User||--|{Account:"owns"

Account{

intaccount_id

intuser_id

stringaccount_type

decimalbalance

datetimeopen_date

}

Transaction{

inttransaction_id

intaccount_id

stringtransaction_type

decimalamount

datetimetransaction_time

}

Loan{

intloan_id

intaccount_id

decimalloan_amount

intloan_term

stringrepayment_status

}

User{

intuser_id

stringname

stringcontact

stringaddress

}24.33.数据表设计账户表(Account)字段名数据类型描述account_idINT账户IDuser

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论