• [问题求助] 如何减少备份空间开销?
    如何减少备份空间开销?如何减少备份空间开销?
  • [技术干货] Kubernetes中PostgreSQL的推荐方法
    你是否曾听说过避免在Kubernetes中运行数据库的建议?有人认为Kubernetes不适合有状态的应用程序,但这些说法是否属实?让我们深入探讨并挑战这些说法。你是否曾听说过避免在Kubernetes中运行数据库的建议?有人认为Kubernetes不适合有状态的应用程序,但这些说法是否属实?让我们深入探讨并挑战这些说法。Kubernetes:有关有状态工作负载的误解平台在涉及有状态应用程序时,Kubernetes经常受到不公平的抨击。这种误解源自早期阶段,当时我们的选择局限于部署(Deployments)和有状态集(StatefulSets)。最初认为有状态集应该是数据库的首选。然而,这忽略了Kubernetes的真实本质——一种设计用于定制化的可扩展平台。网络和存储是Kubernetes的典型例子。我们并不依赖内置功能,而是通过CNI和CSI插件增强功能以适应我们特定的需求。这个原则也适用于数据库,尽管由于缺乏标准的数据库接口,这条路并不那么直接。有状态集的困境最初,早期采用者使用有状态集在Kubernetes上运行数据库。它们提供了一定程度的秩序——可预测的扩展性、稳定的网络标识符和持久化存储。然而,仅有有状态集是不足以在生产环境中管理数据库的,生产环境需要备份、故障转移、可观察性等更多功能。自定义资源定义对于Kubernetes中的数据库来说,真正改变游戏规则的是自定义资源定义(CRDs)和自定义控制器,也称为运算符(operators)。这些Kubernetes扩展允许创建具有自定义逻辑和生命周期管理的复杂有状态应用程序。换句话说,它们赋予了Kubernetes智能、高效地处理数据库的能力。这种方法将Kubernetes的功能扩展到了远远超出其核心功能的领域,使其能够满足数据库管理的复杂需求。使用Cloud Native PG运行PostgreSQL为了说明问题,让我们探讨一下使用Cloud Native PG项目在Kubernetes上运行PostgreSQL。CloudNativePG的设计允许在多个区域扩展PostgreSQL架构,提供了一个强大的灾难恢复框架,RPO(恢复点目标)极小。使用Cloud Native PG,你不仅仅是通过有状态集来管理Pods;你正在利用一个专用控制器,它封装了数据库管理的一系列扩展职责。该项目体现了Kubernetes作为基础平台到成为一个完全成熟的运行数据库的强大平台的转变。它支持从高可用设置到备份、扩展和配置管理的所有内容,都是通过CRDs进行声明性定义。Cloud Native PG的架构高可用性和流复制在核心层,CNPG同时支持异步和同步流复制。它允许配置一个主实例,以及多个热备份副本以实现同一Kubernetes集群内的高可用性。服务可供应用程序连接到主实例(**-rw**)、热备份副本(**-ro**)或任何实例进行只读工作负载(**-r**)。共享无CNPG推荐采用共享无体系结构以增强韧性。这意味着PostgreSQL实例位于不同的Kubernetes工作节点上,跨越不同的可用区,不共享存储。每个节点理想情况下使用本地卷(local volumes)存储PostgreSQL数据,从而提高集群的容错性。CNPG自动化地更新服务以适应集群拓扑的变化。例如,在故障转移期间,它会更新**-rw**服务,将应用程序流量重定向到新晋升的主实例,确保无缝的连续性。读写和只读工作负载应用程序可以连接到**-rw**服务以在主实例上执行写操作。对于只读工作负载,应用程序使用**-ro**服务连接到热备份副本,从而分担主节点的查询负载。这种设置旨在优化集群中的工作负载分布。多集群部署和灾难恢复CNPG通过一个名为副本集群(Replica Cluster)的功能,支持跨多个Kubernetes集群的部署。这种设置涉及在一个集群中拥有一个可写主实例,以及在其他集群中拥有只读副本集群,促进全球性的灾难恢复,并减少RPO(恢复点目标)和RTO(恢复时间目标)。部署运算符要开始使用CloudNativePG(CNPG),你需要在你的Kubernetes环境中部署运算符。可以通过使用**kubectl**应用一个YAML清单文件来完成。按照以下步骤安装CNPG运算符:安装所需版本的运算符清单文件。可以使用以下命令kubectl apply -f https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.20/releases/cnpg-1.20.4.yaml通过检查部署状态来验证安装:kubectl get deploy -n cnpg-system cnpg-controller-manager默认情况下,运算符作为Kubernetes的**Deployment**安装在**cnpg-system**命名空间中。此部署的名称取决于安装方法。使用**kubectl**中的**describe**命令获取有关运算符部署的更多详细信息:kubectl describe deploy -n cnpg-system部署PostgreSQL集群一旦CNPG运算符安装完成,你可以通过应用定义所需的**Cluster**配置文件来部署PostgreSQL集群。下面是一个示例配置文件(**cluster-example.yaml**),它定义了一个使用默认存储类的简单的3节点PostgreSQL集群:apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: cluster-example spec: instances: 3 primaryUpdateStrategy: unsupervised storage: size: 1Gi使用以下命令应用配置文件来创建一个3节点的PostgreSQL集群:kubectl apply -f cluster-example.yaml你可以使用**get pods**命令检查集群Pods的状态:kubectl get pods通过按照这些步骤,你可以在Kubernetes环境中快速设置CNPG运算符并部署PostgreSQL集群。为了将你的集群与其他工作负载隔离开来,考虑创建一个单独的命名空间或使用标签来识别与特定集群相关的对象。运算符将为了便于管理将**cnpg.io/cluster**标签应用于相关对象。Kubernetes和数据库的未来Cloud Native PG证明了Kubernetes适合数据库,特别是在增强了CRDs和自定义控制器的情况下。它已经提交给CNCF进行孵化,有望成为生态系统中的PostgreSQL旗舰项目。选择正确的数据库管理路径关键的决策在于选择托管数据库服务还是自管理方法。在后一种情况下,Kubernetes在如Cloud Native PG这样的解决方案中表现出色,为其采用提供了一个有力的论据。结论:拥抱Kubernetes的方式Kubernetes已经成长为运行数据库的最佳平台,前提是我们要接受其可扩展的本质。Cloud Native PG不仅是一个选择;它是PostgreSQL的首选,提供了丰富的功能集和开源社区支持的保证。如果你倾向于自管理数据库,考虑Cloud Native PG——它不是替代方案,而是未来发展的最佳方式。
  • [技术干货] SQL多行值合并一行字符串逗号分隔【转】
    问题:假设我们有一张学生表:姓名,科目,成绩。在查询的SQL使用中我们可能会有这样一种需求:展示学生姓名和科目成绩,科目成绩用逗号分隔。实际上也就是将这个学生的所有成绩记录转换为一条记录展示出来。就可以使用这个SQL:123SELECT 姓名, LISTAGG(成绩, ',') WITHIN GROUP (ORDER BY 科目) AS 科目成绩FROM 学生表GROUP BY 姓名;这个查询首先选择了 “姓名” 字段,然后使用 LISTAGG函数将相同学生的 “成绩” 字段值以逗号分隔的形式合并成一个字符串,并按照 “科目” 字段的顺序进行排序。LISTAGG LISTAGG 是一个用于聚合操作的字符串函数,它在Oracle数据库系统中可用,当然达梦也可以。该函数用于将多个行中的值连接为一个字符串,并且可以指定分隔符来分隔每个值。通常语法如下:1LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY column)expression 是要连接的列或表达式。delimiter 是用于分隔每个值的字符串。WITHIN GROUP 子句用于指定对结果进行排序的列。可以选择省略此子句。ORDER BY 子句用于指定排序的顺序。LISTAGG 函数将具有相同分组键的行的值连接起来,并使用指定的分隔符将它们分隔开。这非常适用于将多个值合并为一个字符串,常用于生成逗号分隔的列表。如图我们看到这个查询结果中parti_name字段有多个数据,现在我们把它转换为一条记录查询出来且用逗号隔开。123SELECT uuid as uuid, LISTAGG(parti_name, ',') WITHIN GROUP ( ORDER BY DISPLAYORDER) AS parti_name        FROM PARTICIPA  GROUP BY uuid注意:LISTAGG 聚合函数是 Oracle 数据库中的特定函数,用于将多个行的值进行连接。因此,LISTAGG 函数可以在 Oracle 数据库中使用,并且从 Oracle 11g 版本开始可用。在其他数据库系统中,可能会有类似的函数用于字符串聚合操作,但具体的函数名称、语法和用法可能会有所不同。如下是一些其他数据库系统中类似 LISTAGG 的函数,有类似需求可百度求解:MySQL:GROUP_CONCATSQL Server:STRING_AGGPostgreSQL:STRING_AGGIBM DB2:LISTAGG
  • [技术干货] 服务器和数据库有何区别与联系
    服务器和数据库是计算机系统中的两个不同的概念,它们有不同的功能和作用。下文给大家介绍一下服务器与数据库有何区别和联系一、服务器与数据库的区别:1、功能和用途:服务器:主要用于提供服务、处理客户端请求,可以是 Web 服务器、文件服务器、应用服务器等。数据库:用于存储和管理数据,支持对数据的查询、插入、更新和删除操作。2、数据处理:服务器:处理客户端请求,执行业务逻辑,可能需要与数据库进行交互。数据库:负责数据的组织、存储和提供对数据的操作。3、形式:服务器:可以是物理硬件或软件程序。数据库:通常指数据库管理系统(DBMS)软件和其管理的数据。4、举例:服务器:Apache、Nginx是常见的Web服务器。数据库:MySQL、Oracle、MongoDB是常见的数据库管理系统。二、服务器与数据库的联系:1、协同工作:服务器和数据库通常协同工作。服务器处理用户请求,可能需要从数据库中检索数据,执行业务逻辑,并将结果返回给客户端。2、数据交互:服务器和数据库之间通过网络进行数据交互。服务器向数据库发起查询、更新等请求,数据库返回相应的结果。3、应用层和数据层:典型的应用架构中,服务器负责应用逻辑,而数据库负责数据管理。这种分层结构提高了系统的可维护性和可扩展性。4、支持多用户访问:服务器和数据库通常设计为支持多用户并发访问。多个客户端可以同时连接到服务器,而数据库需要处理多个并发的读写操作。5、业务逻辑执行:服务器执行应用程序的业务逻辑,可能需要从数据库中检索数据、更新数据,然后将结果返回给客户端。在现在的程序服务中,服务器和数据库基本都是绑定在一起的。要部署一个服务,大概率都要使用数据库来存储用户数据。综上所述,服务器和数据库在一个应用系统中是相互关联的,彼此协同工作以提供完整的服务。服务器负责处理请求、执行业务逻辑,而数据库负责数据的存储和管理。在现代应用中,这两者之间的协同工作是构建可靠和高效系统的关键。
  • [交流吐槽] 记录下查询数据库遇到的问题,
    我之前有个语句,意思是查询A表,但是 b表里面如果有的话,要匹配上才返回,如果B表里面没数据的话,也要返回,实际这条语句没有返回想要的数据,也不知道客户的数据库是什么版本的,     select a.* from table_a a where 1=1                and  (EXISTS(             select 1 from table_b where a_id = a.id             and field_a = '1'             ) or (             select count(1) from table_b where a_id = a.id             ) = 0)后面只能改成 union来实现了,     select a.* from table_a a where 1=1                and EXISTS(             select 1 from table_b where a_id = a.id             and field_a = '1'             )             union                           select a.* from table_a a where 1=1                and   (             select count(1) from table_b where a_id = a.id             ) = 0
  • [问题求助] Data Studio连接数据库:发生未知内部错误。新手,百度没查到,有大佬看看
    11/17/23 06:55:45 下午  [ERROR] - [com.huawei.mppdbide.adapter.gauss.DBConnection] No client encoding passed for execution. 11/17/23 06:55:45 下午  [ERROR] - [com.huawei.mppdbide.adapter.gauss.DBConnection] No client encoding passed for execution. 11/17/23 06:55:46 下午  [ERROR] - [com.huawei.mppdbide.adapter.gauss.DBConnection] No client encoding passed for execution. 11/17/23 06:55:46 下午  [ERROR] - [com.huawei.mppdbide.view.ui.connectiondialog.DBConnectionDialog] 创建连接配置文件出错.
  • Navicat 连接 GaussDB 主备版的快速入门
    Navicat Premium(16.2.8 Windows版或以上) 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁移等),这使得Navicat 可以极大地满足 GaussDB 不同用户(初级、进阶和高阶)的全方位需求。接下来,我们将为大家介绍Navicat 基于 GaussDB主备版的快速入门。- Navicat Premium 产品页面: https://navicat.com.cn/products/navicat-premium- 如果你有任何问题,欢迎与我们团队取得联系(邮箱地址:upgrade.cn@navicat.com)目录一、连接 GaussDB 主备版二、GaussDB服务器对象的创建/设计(编辑)三、数据查看器四、查询五、模型六、调试器七、数据迁移工具八、数据生成九、自动运行十、备份和还原十一、用户/权限十二、追踪日志十三、配置一、连接 GaussDB 主备版1)创建连接若要成功地创建一个新的连接到本地或远程服务器,都要在常规选项卡中设置连接属性。点击“连接”并选择 “GaussDB 主备版”,然后,在连接窗口输入必需的信息(常规信息),最后点击“确定”;也可以先点击“测试连接”,确认是否连接成功后,再点击“确定”。2)复制/移动连接到项目如果你已登录 Navicat Cloud 或 On-Prem Server(Navicat 协同合作用户指南 | Navicat 协同合作手册),你可以将我的连接中的连接同步到项目。右键单击“我的连接”中的任一个GaussDB连接,然后选择“复制连接到”或“移动连接到”,选择移动到的项目或移动到新建项目中。【提示】你可以通过类似的方式将项目中的连接移动或复制到我的连接。3)编辑连接右键单击“我的连接”中的一个GaussDB连接,点击“编辑连接”,可对连接信息进行修改。4)高级设置在连接窗口中的“高级”选项卡中,包括设置位置、客户端字符集、保持连接间隔、自动连接、限制连接会话等选项。设置位置: 当创建一个新的连接时,Navicat 将在设置位置创建一个子文件夹。大部分文件都保存在该子文件夹中:客户端字符集:选择 Navicat 使用的会话客户端字符集。保持连接间隔:通过 ping 来保持连接。你可以在编辑框中设置 ping 与 ping 之间的间隔。自动连接:当程序启动时自动打开连接。限制连接会话:指定服务器允许的最大可同时连接的数。5)使用不同配置文件连接每个连接可以有多个连接设置略有不同的配置文件。 例如,不同的数据库用户。在连接窗口中,点击左下角的小窗口图标打开配置文件窗格。点击“+ 新建连接配置文件”->输入配置文件的名称、连接设置,点击“确定”。 或者,还可以右击任一个配置文件->点击“复制配置文件”。创建好配置文件后,右击配置文件,选择“设置为活动配置文件”切换配置文件,或者,在主窗口中,右键单击连接,然后选择“切换连接配置文件”。 二、GaussDB服务器对象的创建/设计(编辑)1)数据库和模式若要开始使用服务器对象,你应该创建并打开一个连接。如果服务器中没有任何对象,你需要创建一个新的数据库或/和一个新的模式。(1)创建/设计数据库在导航窗格中,右键单击一个连接,然后选择“新建数据库”,在弹出的窗口中输入数据库的属性。然后,在导航窗格中,右键单击已存在的数据库,然后选择“编辑数据库”,在弹出的窗口中编辑数据库的属性。(2)创建/设计模式在导航窗格的GaussDB连接中,右键单击已连接的一个数据库,然后选择“新建模式”,在弹出的窗口中输入模式的属性。然后,在导航窗格中,右键单击已存在的模式,然后选择“编辑模式”,在弹出的窗口中编辑模式的属性。Tip:你可以点击导航窗格任意位置,然后直接输入搜索字符串来筛选连接(或者使用快捷键Ctrl+F打开输入框)。若要只显示已打开的对象,从菜单栏选择“查看”->“导航窗格”->“仅显示活跃对象” (或者直接点击输入框左侧的图标)2)表表是数据库对象,包含数据库中的所有数据。表是由行和列组成,它们的相交点是字段。在主窗口中,点击“表”来打开表的对象列表。(1)创建表你可以创建“常规”、“外部”表。在对象工具栏点击“新建表”旁的下箭头并选择表类型。(2)设计表“表设计器”是一个用于设计表的 Navicat 基本工具,能让你创建、编辑或删除表字段、索引、外键,以及更多。鼠标右击此表->设计表,或者选中此表,点击“设计表”。(3)视图视图让用户访问一组表,就像它是单个数据一样。你可以使用视图来限制访问行。在主窗口中,点击“视图”来打开视图的对象列表。创建视图鼠标右击此视图->新建视图,或者选中此视图,点击“新建视图”。 ​设计视图鼠标右击此视图->设计视图,或者选中此视图,点击“设计视图”。4)过程或函数过程或函数是模式对象,包含一组保存在服务器上的 SQL 语句。在主窗口中,点击“函数”来打开函数的对象列表。(1)在对象工具栏点击“新建函数”。会弹出“函数向导”,让你简易地创建函数。选择例程的类型:“过程”或“函数”,并定义参数,如果你是创建一个函数,从列表中选择“模式”和“返回类型”。设计函数“函数设计器”是一个用于设计过程或函数的 Navicat 基本工具。你可以在“定义”选项卡中输入有效的 SQL 语句。这可以是一个简单的语句,如 SELECT 或 INSERT,或它可以是一个用 BEGIN 和 END 写的复合语句。复合语句可以包含声明循环和其它控制结构语句。若要自定义编辑器并查看更多 SQL 编辑功能,请参阅查询编辑器。5) 其他对象Navicat 还能让你管理其他 GaussDB 对象:索引、运算符、运算符类别、序列、触发器、表空间、同义词和包等等。在主窗口中,点击“其他”,然后选择一个对象来打开对象列表。6) 维护对象Navicat 为维护 GaussDB对象提供完整的解决方案。在主窗口的导航窗格中或对象选项卡中选择对象,右键单击已选择的对象,选择“维护”,然后从弹出式菜单中选择一个维护选项,结果显示在弹出的窗口中。三、数据查看器Navicat 包含一个数据查看器,让你查看、更新或删除数据。查看器还包括一些高级功能和编辑器,帮助你在操作数据时理解数据。你可以使用通用键盘导航来浏览数据。1)视图切换数据查看器会以网格或表单显示数据。若要切换视图,请点击位于底部的“网格视图”或“表单视图”。2)导航栏的使用使用数据查看器的“导航栏”按钮,可以快捷方便地浏览记录或页。导航栏的功能:3) 编辑数据/记录在对象窗格中打开一个表,即可直接对表中的数据进行编辑。4) 辅助编辑器Navicat 提供强大的辅助编辑器来查看和编辑字段的内容。编辑器可让你在表中查看、更新、插入或删除数据。在工具栏点击“文本”、 “十六进制”、“图像”和“网页”来打开相应的查看器或编辑器。5) 数据管理Navicat 提供数据/记录的自定义筛选、排序和列自定义功能,Navicat 的排序、筛选和列功能是暂时重新排列记录,以便你可以用一个不同的序列查看或更新它们。四、查询查询是根据用户的请求用可读格式显示从数据库中提取的数据。Navicat 提供强大的查询工具:查询编辑器 - 可直接编辑查询文本,查询创建工具、查找创建工具或聚合创建工具 - 视觉化地创建查询。你可以保存查询,用于设置自动运行任务。在主窗口中,点击“查询”来打开查询的对象列表。你亦可以在主工具栏点击“新建查询”来创建一个新的查询而不必打开任何连接。若你希望使用设备中的其他支持 SQL查询的外部编辑器打开查询,请右键单击任一个查询文件,然后选择“使用外部编辑器打开”。你可以在选项中设置外部编辑器的文件路径。【提示】查询(.sql)保存于设置位置。若要打开该文件夹,请右键单击查询,然后选择“打开所在的文件夹”。如果连接已同步到 Navicat Cloud 或 On-Prem Server,它的查询会保存在云。1) 查询设计器让你创建和编辑 SQL 文本,准备和运行已选择的查询,还包括查询创建工具、美化SQL、创建图表、智能自动完成代码等功能。2) 查询创建工具当你使用查询创建工具创建 SQL 时,SELECT 语句将会在查询编辑器中自动生成。3) 代码段代码段为在编辑器中工作时将可重用的代码插入到语句或脚本中提供了一种简单的方法。代码段窗格位于编辑器的右侧。如果编辑器窗口停靠在 Navicat 主窗口内,你可以点击在信息窗格中的代码段图标来打开代码段库。代码段库包含所有内置和用户定义的片段。从下拉式列表中选择一个标签,或在搜索框中输入搜索字符串来筛选代码段列表。如果你想根据数据库类型显示可用的片段,你可以右键单击代码段库中的任意位置,然后禁用“显示其他数据库类型的片段”。五、模型“模型”是一个用于创建和操作数据库模型的强大工具。在主窗口中,点击“模型”来打开模型的对象列表。一些主要的功能如下:创建和操作概念、逻辑或物理模型、逆向工程、正向工程、直接创建和编辑表结构​1)逆向工程将一个数据库/模式、表或视图转为物理模型。右键单击已打开的模式、表或视图,然后从弹出式菜单中选择“逆向模式到模型”、“逆向表到模型”或“逆向视图到模型”。​2)正向工程将一个物理模型转为 SQL 文件或数据库/模式。选择“文件”->“同步到数据库”,“同步到数据库”功能让你比较物理模型和现有数据库或模式,显示它们之间结构的差异,并提供同步模型的结构到目标连接。【提示】模型文件(.ndm2/.ndml2/.ndmc2)保存于配置文件位置。若要打开该文件夹,请右键单击模型,然后选择“打开所在的文件夹”。如果模型已同步到 Navicat Cloud 或 On-Prem Server,它会保存在云。3)打开一个外部模型文件在菜单栏中,选择“文件”->“打开外部文件”->“模型”,在对话框窗口中浏览找到文件并点击“打开”。4)保存一个 Navicat 模型为外部文件在模型设计器中,选择“文件”->“另存为外部文件”,选择保存路径和输入文件名,点击“保存”。六、调试器Navicat 提供了 GaussDB 调试器,使用调试器,你可以切换断点,获取调用堆栈,查看变量值,追踪代码等。调试器能指导你一步一步调试过程或函数。若要启动调试器,请点击函数设计器内的“调试”按钮。​七、数据迁移工具1)导入/导出向导 “导入向导”让你从 CSV、TXT、XML、DBF 等格式导入数据到表。你可以将设置保存为一个配置文件以供将来使用或用作设置自动运行任务。若要打开导入向导窗口,请在对象工具栏点击“导入向导”。【提示】你可以拖拉一个支持格式的文件到表的对象选项卡,或到导航窗格中的一个数据库或模式。Navicat 将会自动弹出导入向导窗口。如果已高亮显示现有的表,Navicat 将会导入文件到已高亮显示的表。否则,它会导入文件到新的表。“导出向导”让你从表、视图或查询结果导出数据到任何可用的格式。你可以将设置保存为一个配置文件以供将来使用或用作设置自动运行任务。若要打开导出向导窗口,请在对象工具栏点“导出向导”。保存配置文件:2) 数据传输Navicat 让你从一个模式传输对象到另一个模式,或者到一个 SQL 文件。目标模式可以与源模式的服务器相同或在其他服务器中。若要打开数据传输窗口,请从菜单栏选择“工具”->“数据传输”。你可以将设置保存为一个配置文件以供将来使用或用作设置自动运行任务。若要打开一个已保存的配置文件,请点击“加载配置文件”按钮并从列表中选择。【提示】配置文件保存于配置文件位置。​【提示】你可以拖拉表到导航窗格中的一个模式。如果目标模式是在相同的连接中,Navicat 将会直接复制表。否则,Navicat 将会弹出数据传输窗口。3) 数据同步Navicat 让你以详细分析的进程从一个模式传输数据到另一个模式。换句话说,Navicat 能使不同模式的数据保持最新,以便每个库包含相同的信息。若要打开数据同步窗口,请从菜单栏选择“工具”->“数据同步”。你可以将设置保存为一个配置文件以供将来使用或用作设置自动运行任务。若要打开一个已保存的配置文件,请点击“加载配置文件”按钮并从列表中选择。【提示】配置文件保存于配置文件位置。4) 结构同步Navicat 让你以详细分析的进程比较和修改表的结构和其他对象。换句话说,Navicat 能比较两个数据库和/或模式之间的对象并显示其结构的差异处。若要打开结构同步窗口,请从菜单栏选择“工具”->“结构同步”。你可以将设置保存为一个配置文件以供将来使用。若要打开一个已保存的配置文件,请点击“加载配置文件”按钮并从列表中选择。【提示】配置文件保存于配置文件位置。5) 转储和运行SQL或脚本文件“转储 SQL 文件”和“运行 SQL 文件”功能让你将你的模式、表转储为 SQL,或者在你的连接、数据库或模式运行 SQL。(1)转储一个文件在主窗口中,右键单击已打开的模式或已选择的表,然后选择“转储 SQL 文件” ->“仅结构”或“结构和数据”。浏览保存位置并输入文件名。点击“保存”。【提示】转储进程完成后,你可以点击“打开”按钮来使用查询编辑器打开文件。(2)在主窗口中,右键单击已打开的连接、数据库或模式,然后选择“运行 SQL 文件”。浏览你的 SQL 文件,选择文件的编码并启用适当的选项。点击“开始”。【提示】你可以拖拉一个 .sql 文件到导航窗格内已打开的连接、数据库或模式。Navicat 将会自动弹出运行 SQL 文件窗口。八、数据生成利用列智能数据生成,你可以使用真实且有意义的测试数据填充已选择的表。列中生成的数据可基于另一列中的数据。你可以选择填充空表,或向现有表中添加额外的行,并控制外键数据的创建。若要打开数据生成窗口,请从菜单栏选择“工具”->“数据生成”。你可以将设置保存为一个配置文件以供将来使用或用作设置自动运行任务。若要打开一个已保存的配置文件,请点击“加载配置文件”按钮并从列表中选择。【提示】配置文件保存于配置文件位置。九、自动运行Navicat 让你使用“Windows 任务计划程序”来在一个或多个固定间隔期自动运行工作,并可设置在特定日期和时间开始和结束。在自动运行中,可以从数据库添加查询、备份、数据传输、数据同步、数据生成、图表、导入、导出等。你可以在一个批处理作业里定义要运行的工作列表,并可手动或在指定的时间里运行它。在主窗口中,点击“自动运行”来打开自动运行的对象列表。【提示】批处理作业文件保存于配置文件位置。1) 创建批处理作业在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。你可以双击或拖放工作来将工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除工作,请以相同的方式移除它们。你可以在一个批处理作业中运行来自不同服务器的配置文件。若要重新排序工作的序列,可使用“上移”或“下移”按钮。如果你想备份整个服务器,你可以选择连接并选择“Backup Server xxx”。最后,保存并运行批处理作业。2) 计划批处理作业点击保存后,你可以点击 “设置任务计划”来为一个批处理作业设置计划和点击“删除任务计划”来移除计划。十、备份和还原内置备份和还原工具让你备份或还原你数据库内的对象。1) 备份你可以将设置保存为一个配置文件以供将来使用或用作设置自动运行任务。在主窗口中,点击“备份”来打开备份的对象列表。【提示】备份文件保存于设置位置。若要打开该文件夹,请右键单击备份文件,然后选择“打开所在的文件夹”。2) 还原​十一、用户/权限1)  新建用户/角色打开一个GaussDB 连接,点击“角色”->”新建角色”,输入角色相关信息(角色名、密码等)、设置相关权限、成员属性和注释后,点击“保存”。2)  编辑用户/角色3) 权限管理员为数据库对象添加或删除权限。十二、追踪日志1) 日志文件Navicat 提供数个日志文件记录在 Navicat 已执行的操作,它们位于“logs”目录,例如:C:\Users\Guest\Documents\Navicat\Premium\logs\。你可以在选项中更改日志文件的位置。2) 历史日志查看器历史日志查看器显示所有在 Navicat 已运行或正在运行的语句或脚本。如果你只想显示错误信息,点击“仅显示错误”。你也可以更改显示的信息,从“查看”菜单选择 - 显示日期、显示时间、显示服务器名等等。【注意】当你点击 暂停“暂停”,在暂停历史日志期间你所做的任何操作将在恢复后显示。十三、配置Navicat 提供一些选项让你自定义用户界面和性能。若要打开选项窗口,请从菜单栏选择“工具”->“选项”。1) 界面主题2) 中英文切换3) 文件位置Navicat 提供数个日志文件,以记录在 Navicat 中已执行的操作,它们位于日志位置路径中。而各服务器的配置文件则保存自动运行、图表、代码段、数据生成、数据同步、数据传输、结构同步和模型等的配置信息。4) 高级若要追踪Navicat 的日志信息,需要勾选“启用诊断日志”。【注意】更改完配置后,需要重启 Navicat 后才生效。以上希望对你有帮助,谢谢浏览!
  • [问题求助] 文档数据库DDS
    文档数据库DDS的单节点架构主要是可视化运维么?
  • [问题求助] 数据库的集群架构是哪些
    文档数据库的集群架构是深恶
  • [用户实践] 利用OpenGauss设计和实现成绩管理系统
    一、需求分析先介绍系统开发意义、可行性和应用环境等。某校管理学生成绩的工作人员,根据实际工作需要,提出了以下基本数据和业务处理需求:(1)学校设置了各专业,在专业下开设班级,每个班级包含若干学生,学生信息至少需要包含学号、姓名、性别、年龄、生源所在地、已修学分总数等数据项;另外,需要有地区信息,用于统计某一地区的学生数;(2)课程信息表至少需包含课程编号、课程名称、任课教师、开课学期、学时、考试或考查、学分等数据项,课程根据班级开设。(3)教师信息至少需要包含教师编号、姓名、性别、年龄、职称、联系电话等数据项;(4)学生成绩至少需要学号,学期,课程名称,成绩,任课老师等数据项;(5)需要实现业务处理和查询功能:a) 学生成绩按每学年成绩统计;学生成绩b) 名次排定;c) 每门课程平均成绩统计;d) 学生所学课程及学分统计;e) 对每个学生输入成绩的时候,自动生成学生的已修学分总数;f) 学生成绩查询;g) 教师任课查询;h) 班级课程开设查询。(6) 补充说明a) 假设学籍管理制度是采用学年制,且暂不考虑选修课情况。b) 同一专业可能有多个班,所以同一门课可能需要多个教师上课,一个教师在一学期可能上多门课程。1.1 数据需求描述分析系统的数据需求,用数据字典和数据流图描述系统的数据需求,一般要求有2级(初级和详细级)数据流图,并确定系统开发边界。1.1.1数据字典➢ 数据项名 数据项名:学号含义说明:唯一标识每个学生数据类型:CHAR长度:12数据项名:学生姓名含义说明:标识每个学生的姓名数据类型:CHAR长度:20数据项名:学生性别含义说明:学生性别数据类型:CHAR长度:3取值范围:“男”或“女”取值含义:学生分为男生和女生数据项名:学生出生日期含义说明:表明每个学生的出生日期数据类型:DATESTAMP数据项名:籍贯(省)含义说明:表明每个学生入学前的来源地数据类型:CHAR长度:20数据项名:籍贯(市)含义说明:表明每个学生入学前的来源地数据类型:CHAR长度:20数据项名:已修学分总数含义说明:学生已修课程的学分总数数据类型:FLOAT长度:4取值范围:>=0取值含义:已修学分不可能小于0与其他数据项的逻辑关系: 等于该学生所有课程的学分数据项之和数据项名:学生登录密码含义说明:学生账户用于登录系统时的密码数据类型:CHAR长度:20数据项名:成绩含义说明:学生某一课程的成绩数据类型:INT长度:3取值范围:0 ~ 100取值含义:课程成绩60以上为合格,100为满分,不可能低于0分数据项名:上课时间含义说明: 表示教师授课和学生上课的时间数据类型: CHAR长 度: 20数据项名:上课地点含义说明: 表示教师授课和学生上课的地点数据类型: CHAR长 度: 20数据项名:专业编号含义说明: 唯一标识每一个专业数据类型: CHAR长 度: 20数据项名:专业名称含义说明:表示咋混也的名称数据类型: CHAR长 度: 20数据项名:班级编号含义说明: 唯一标识每一个班级数据类型: CHAR长 度: 20数据项名:班级名称含义说明:表示班级的名称数据类型: CHAR长 度: 20数据项名:课程编号含义说明:唯一标识每一门课程数据类型: CHAR长 度: 20数据项名:课程名称含义说明:表示课程的名称数据类型: CHAR长 度: 20数据项名:开课学期含义说明:某课程开设的时间节点数据类型: CHAR长 度: 20取值范围:类似于2021-2022(1),2022-2023(2)这样代表某一学年第几学期数据项名:学时含义说明:某课程总共需要的授课时间数据类型: INT长 度: 3取值范围:(0,999)取值含义:课程授课时间不小于0小时,不大于999小时数据项名:学分含义说明:某课程的学分数据类型:FLOAT数据项名:考核方式含义说明:某课程的评价方式数据类型: CHAR长 度: 2取值范围:考查/考试取值含义:课程只有考查和考试两种考核方式数据项名:教师编号含义说明:唯一标识每一位教师数据类型:CHAR长度: 20数据项名:教师姓名含义说明:表示每一位教师的姓名数据类型:CHAR长度: 20数据项名:教师性别含义说明:表示每一位教师的姓名数据类型:CHAR长度: 2取值范围:男/女取值含义:教师性别只有男和女数据项名:教师出生日期含义说明:表示每一位教师的出生日期,可计算教师的年龄数据类型:DATE数据项名:职称含义说明:表示每一位教师的职称数据类型:CHAR长度:20数据项名:联系电话含义说明:教师的联系电话数据类型:CHAR长度:20数据项名:教师登录密码含义说明:教师账户用于登录系统时的密码数据类型:CHAR长度:20数据项名:管理员登录账号含义说明:管理员账户用于登录系统时的密码数据类型:CHAR长度:20数据项名:管理员登录密码含义说明:管理员账户用于登录系统时的密码数据类型:CHAR长度:20➢ 数据结构 数据结构名:学生别名:学生基本信息含义说明:定义了每一个学生的基本信息组成:学号、学生姓名、学生性别、学生出生日期、籍贯(省)、籍贯(市)数据结构名:班级别名:学生基本信息含义说明:定义了每一个班级的基本信息组成:班级编号、班级名称数据结构名:专业别名:专业基本信息含义说明:定义了每一个专业的基本信息组成:专业编号、专业名称数据结构名:课程别名:课程基本信息含义说明:定义了每一个学生的基本信息组成:学号、学生姓名、学生性别、学生出生日期、籍贯(省)、籍贯(市)数据结构名:教师别名:教师基本信息含义说明:定义了每个教师的基本信息组 成: 教师编号、教师姓名、教师性别、教师出生日期、职称、联系电话、教师登录密码数据结构名:管理员别名:管理员基本信息含义说明:定义了每个管理员的基本信息组 成: 管理员账号、管理员登录密码➢ 数据流数据流名:输入登录信息含义说明: 登录系统对用户身份进行验证数据来源: 用户数据去向: 身份信息表组 成: 用户账户、用户密码、用户身份数据流名:查询、添加、修改、删除学生本人基本信息、成绩、选课含义说明: 学生进行个人信息的查询,教师、管理员对学生信息进行管理数据来源: 用户数据去向: 学生信息表组 成: 学号、学生姓名、学生性别、出生日期、生源所在省市、班级、专业、选课、课程成绩、已修总学分数据流名:查询、添加、修改、删除教师基本信息、任教情况、任教班级成绩含义说明: 教师对学生及个人信息进行管理、管理员对教师信息进行管理数据来源: 用户数据去向: 教师信息表、学生信息表、选课信息表组 成: 教师编号、教师姓名、性别、出生日期、职称、联系电话、任教信息、任教班级成绩信息➢ 数据存储 数据存储名: 用户账号信息说明: 记录用户账号信息输入数据流: 管理员输入、修改、删除账号信息操作输出数据流: 用户账号表组 成: 用户账号,用户密码,用户身份存取方式: 随机存取数据存储名:学生信息说明: 记录学生基本信息输入数据流: 管理员输入、更新、删除学生信息操作输出数据流: 学生信息表组 成: 学号、学生姓名、学生性别、出生日期、生源所在省市、班级、专业、已修总学分存取方式: 随机存取数据存储名: 教师信息说明: 记录教师基本信息输入数据流: 管理员输入、更新、删除教师信息操作输出数据流: 教师信息表组 成: 教师编号、教师姓名、性别、出生日期、职称、联系电话存取方式: 随机存取数据存储名: 课程信息说明: 记录课程基本信息输入数据流: 管理员输入、更新、删除课程信息操作输出数据流: 课程信息表组 成: 课程编号、课程名称、课程学时、课程学分、开设学期、考核方式存取方式: 随机存取数据存储名: 教师信息说明: 记录专业班级基本信息输入数据流: 管理员输入、更新、删除专业班级信息操作输出数据流: 专业班级信息表组 成: 班级编号、专业名称、专业编号存取方式: 随机存取数据存储名: 教师信息说明: 记录教师任教信息及成绩信息输入数据流: 管理员输入、更新、删除任教信息操作,教师录入成绩操作输出数据流: 任教信息表组 成: 课程编号、教师编号、学生学号、课程成绩存取方式: 随机存取1.1.2 数据流图数据流图主要分为两级,分别为顶级数据流图和次级数据流图。其中顶级数据流图包括学生模块、教师模块、管理员模块,描述了这三个模块与高校管理系统间的数据传递关系。具体如下图1-1所示。图1-1 顶级数据流图次级数据流图是对顶级数据流图局部模块的细化描述与拓展描述,这里根据三个模块将顶级数据流图细化出了三个次级数据流图,分别为学生模块次级数据流图、教师模块次级数据流图、管理员模块次级数据流图。学生模块的主要功能为课程信息、个人信息和成绩、已修总学分的查询,具体的数据流图如下图 1-2 所示:图 1-2 学生模块次级数据流图教师模块的主要功能为授课信息、教师个人信息、授课班级成绩信息的查询以及学生课程成绩的录入,具体的数据流图如下图 1-3 所示:图 1-3 教师模块次级数据流图管理模块的主要功能为学生成绩的查询以及对于学生、课程、教师信息的管理,具体的数据流图如下图 1-4 所示图 1-4 管理模块次级数据流图1.2 系统功能需求本高校成绩管理数据库系统分为4个界面,分别为登录界面、学生界面、教师界面和管理员界面,并由登录界面中的身份选择来决定界面的选择。学生界面有3个功能,分别为学生个人信息查询、个人成绩查询和班级课程查询功能;教师界面有5个功能,分别为教师个人信息查询、授课信息查询、学生成绩统计、学生成绩查询和学生成绩录入功能;管理员界面有5个功能,分别为对学生信息、成绩信息、教师信息、课程信息的管理(查询、添加、删除、更新)以及地区人数的统计功能。其中,由于管理员不具备更改成绩的权限,因此管理员界面不设置对成绩信息的更新功能。除此之外,本系统对所有的信息都具有模糊查询和按各数据项排序的功能, 而且实现了灵活排版调整内容的自适应界面。本系统的功能结构如下图 1-5 所示图 1-5 高校成绩管理数据库系统功能结构1.3 其他性能需求并发用户数:考虑到实际应用,数据库系统应面向在校学生和教师以及教务 处管理员使用,理论上并发用户数应到达上千数量级;响应时间:考虑到实际应用,数据库系统应响应时间足够短,理论上不大于 3s;存储需求:考虑到实际应该,数据库系统应在满足查询效率的前提下,尽量 精简存储空间,减少数据冗余。1.4 其他需求1. 保证用户数据操作的简单便捷;2. 用户更新信息时数据库应实时更新;3. 保证系统良好的交互性、功能性、稳定性;4. 建立存储过程,集成操作功能,增加数据更新的便利性;5. 建立触发器,保证数据项格式的规范化以及数据的一致性;6. 保证前端界面的简洁美观、人性化,能对错误信息进行提示;7. 满足高并发下的大数据量交互需求,满足数据备份的数据量迁移;8. 用户分身份以账号密码登录数据库应用系统,涉及不同的界面和功能。二、概念结构设计2.1 局部E-R图局部 E-R 模式的设计一般可分解为以下三步骤:1. 确定局部 E-R 模式的范围设计局部 E-R 模式的第一步就是确定局部结构的范围,即将用户需求划分 成若干个部分,其划分方式一般有以下两种:(1) 根据企业的组织机构对其进行自然划分;(2) 根据数据库提供的服务种类进行划分,使得每一种服务所使用的数据明显地不同于其他种类,这样就可为每一类服务设计一个局部 E-R 模式。本系统采用第二种划分方式,根据数据库提供的服务种类进行划分。高校成 绩管理数据库可以按提供的服务分为以下三种类型:(1) 学生专业班级信息查询; (2) 学生成绩查询; (3) 教师任教班级课程查询。2. 查询定义实体型每一个局部 E-R 模式都包括一些实体型,定义实体型就是从选定的局部范 围中的用户需求出发,确定每一个实体型的属性和主键。 实体型的设计可参考以下三个原则:(1) 信息描述原则;(2) 依赖性原则;(3) 一致性原则。在确定了实体型和属性后,需对下述几个方面作详细描述:(1) 给实体集与属性命名;(2) 确定实体标识;(3) 非空值原则。3. 定义联系在 E-R 模型中,“联系”用于刻画实体集之间的关联。在定义了实体型和 属性并进行描述后,还要确定实体集之间的联系及其属性。实体集之间的联系非 常广泛,大致可分为以下三种:a) 存在性联系b) 功能性联系c) 事件联系由此,可最终根据学生专业班级信息查询、学生成绩查询、教师任教班级课 程查询三种服务确定三个局部 E-R 模式如下:(1) 学生专业班级信息查询的局部 E-R 图根据高校成绩管理的实际需求,专业信息包括专业编号、专业名称等数据项;班级信息包括班级编号、班级名称等数据项。但为了查询方便,将二者置于一张表中,并且设置班级编号为主键。学生个人信息包含学号、姓名、性别、出生日期、生源所在省、生源所在市、已修学分总数,学生登录密码等数据项,学号为主键。在设计学生实体型的属性时,为满足对学生的年龄信息查询需求,同时又省 去随时间定期更新数据库带来的维护成本,将年龄替换为出生日期。即年龄可由 当前年份减去出生年份获得,使得数据库中信息变得准确又易维护。同时,考虑到之后以学生身份登录系统的需求,将学生登录密码也作为学生 实体型的属性,以方便数据存储和查询。由此定义实体型(下划线处为主键)如下:a) 专业班级(班级编号,班级名称,专业编号,专业名称);b) 学生(学号、学生姓名、学生性别、教师出生日期、生源所在省、生源 所在市、已修学分总数、学生登录密码)。学校设置了各专业,在专业下开设班级,每个班级包含若干学生,并且考虑 到课程根据班级开设,因此将专业班级表也纳入学生专业班级信息查询的局部 E-R 图中。由此定义联系如下:c) 包含:班级和学生之间具有一对多联系,“包含”为联系名。由此可得学生专业班级信息查询的局部 E-R 图如图 2-1 所示:图 2-1 学生专业班级信息查询的局部 E-R 图(2) 学生成绩查询的局部 E-R 图根据高校成绩管理的实际需求,课程信息包括课程编号、课程名称、开课学期、学时、学分、考核方式等数据项,课程编号为主键。由此定义实体型(下划 线处为主键)如下:a) 课程(课程编号、课程名称、开课学期、学时、学分、考核方式);学生选修课程,一名学生可选择多门课程,一门课程可由多名学生选修,每 名学生的每门课程都有一个成绩。由此定义联系如下:b) 选课:学生和课程之间具有多对多联系,“选课”为联系名,包含成绩 属性;由此可得学生成绩查询的局部 E-R 图如图 2-2 所示:图 2-2 学生成绩查询的局部 E-R 图(3) 教师任教班级课程查询的局部 E-R 图在定义实体集之间的联系时,要尽量消去冗余的联系,以免将这些问题留给全局E-R模式的集成阶段,从而造成困难和麻烦。一个班级开设的一门课程只有一个教师,一个教师在一个班可能教授多门课程,一个教师可能教授多个班级同一门课程,因此教师与班级、课程之间的联系是一对多的,可将三者联系设定为1:m:n的联系。图 2-3 教师任教班级课程查询的局部 E-R 图然而,考虑到实际情况中可能存在三者不一定同时知道的情况,即可能仅知道教师所教授的班级,但不知道教师所教授的课程。因此,仍然采取建立三张关系表说明三者之间的两两关系。根据高校成绩管理的实际需求,教师信息包括教师编号、教师姓名、教师性别、教师出生日期、职称、联系电话,教师登录密码等数据项。教师实体型中教 师出生日期和教师登录密码属性的设计思路同学生实体型,此处不再赘述。由此 定义实体型(下划线处为主键)如下:a) 教师(教师编号、教师姓名、教师性别、教师出生日期、职称、联系电 话、教师登录密码)。 一名教师可教授多门课程,一门课程可以有多名教师;一个班级可以开设多 门课程,一门课程可以为多个班级设置;一名教师可以给多个班级授课,一个班 级可以有多名教师任课。由此定义实体型如下:a) 教授:教师和课程之间具有多对多联系,“教授”为联系名;b) 设置:班级和课程之间具有多对多联系,“设置”为联系名;c) 任课:教师和班级之间具有多对多联系,“任课”为联系名。由此可得教师任教班级课程查询的局部 E-R 图如图 2-4 所示:图2-4 教师任教班级课程查询的局部 E-R 图2.2 全局E-R图当各个局部 E-R 模式设计完成后,就需要对它们进行合并,将其集成为一 个全局的 E-R 模式,即数据库的全局概念结构。全局 E-R 模式的集成过程,一般可以分成两步进行:1. 确定公共实体型公共实体型是多个局部 E-R 模式综合集成的基础,因此必须首先确定各局 部 E-R 模式之间的公共实体型。在这一步中,一般仅根据实体型名称和主键来 认定公共实体型,即把同名实体型作为一个候选的公共实体型,把具有相同主键 的实体型作为另一个候选的公共实体型。本系统公共实体型为:(1) 专业班级(班级编号,班级名称,专业编号,专业名称)(2) 课程(课程编号、课程名称、开课学期、学时、学分、考核方式)(3) 学生(学号、学生姓名、学生性别、学生出生日期、生源所在省、生源 所在市、已修学分总数,学生登录密码)(4) 教师(教师编号、教师姓名、教师性别、教师出生日期、职称、联系电 话,教师登录密码)2. 合并局部 E-R 模式局部 E-R 模式的合并顺序有时会影响处理效率和结果。一般都采用逐步合 并的方式,即首先将两个具有公共实体型的局部 E-R 模式进行合并,然后每次 将一个新的与前面已合并模式具有公共实体型的局部 E-R 模式合并起来,最后 再加入独立的局部 E-R 模式,这样即可终获得全局 E-R 模式。 合并局部 E-R 模式可能会产生的冲突通常可分为三种类型:(1) 属性冲突;(2) 命名冲突;(3) 结构冲突。消除冲突后,合并后的全局 E-R 模式如图 2-5 所示:图2-5 全局 E-R 图2.3 优化E-R图按照前面的方法将各个局部 E-R 模式合并后就得到一个初步的全局 E-R 模式,之所以这样称呼是因为其中可能存在冗余的数据和冗余的联系等。所谓冗余的数据是指可由基本数据导出的数据,冗余的联系是指可由其他联系导出的联系。冗余的数据和冗余的联系容易破坏数据库的完整性,给数据库维护带来困难,因此再得到初步的全局 E-R 模式后,还应当进一步检查 E-R 图中是否存在冗余,如果存在冗余则一般应设法将其消除。 一个好的全局 E-R 模式,不仅能全面、准确地反映用户需求,而且应该满足如下的一些条件:实体型的个数尽可能少;实体型所含属性个数尽可能少;实体型之间联系无冗余。下面从优化全局 E-R 模式时需要重点考虑的几个问题入手优化全局 E-R 图1. 实体型是否合并的问题初步全局 E-R 模式不存在冗余的实体型,且没有一对一联系,因此不需要 合并实体型。2. 冗余属性是否消除的问题初步全局 E-R 模式没有冗余属性,因此不需要消除冗余属性。3. 冗余联系是否消除的问题在设计局部 E-R 模式的定义联系时,考虑到已将教师与课程之间的“讲授” 联系、班级与课程之间的“设置”联系、教师与班级之间的“授课”联系转化成 教师、班级与课程之间的一对多三元联系,大大减小了存储空间,降低了维护代 价。三、逻辑结构设计3.1 关系模式设计将 E-R 图转换为关系模式,定义实体型、属性及其联系,关系模式定义如下,其中下划直线的属性为主键,下划波浪线的属性为外键。3.2 数据类型定义对关系模式中的属性定义类型、长度和约束如下表所示:表 3-1 学生信息基本表 linc_Students08字段名数据类型长度约束学生学号sja_Sno08NVARCHAR50主键学生姓名sja_Sname08NVARCHAR50-学生性别sja_Ssex08CHAR3男/女学生生日sja_Sbirthday08DATE--生源省sja_Sprovince08NVARCHAR50-生源市sja_Scity08NVARCHAR50-已修总学分sja_Countcredit08FLOAT--学生登录密码sja_Spassword08NVARCHAR50-班级编号sja_CLno08NVARCHAR50外键表 3-2 专业班级基本表 linc_CLasses08字段名数据类型长度约束班级编号sja_Clno08NVARCHAR50主键专业编号sja_Mno08NVARCHAR50-专业名称sja_Mname08NVARCHAR50-班级名称sja_CLnameNVARCHAR50-表 3-3 课程信息基本表 linc_Courses08字段名数据类型长度约束课程编号sja_Cno08NVARCHAR50主键课程名称sja_Cname08NVARCHAR50-开设学期sja_Cterm08NVARCHAR50-学时sja_Cclasshour08INT4-学分sja_Credit08FLOAT--考核方式sja_Cexamine08NVARCHAR50考察/考试表 3-4 教师信息基本表 linc_Teacher08字段名数据类型长度约束教师编号sja_Tno08NVARCHAR50主键教师名称sja_Tname08NVARCHAR50-教师性别sja_Tsex08CHAR3男/女教师生日sja_Tbirthday08DATE--职称sja_Ttitle08NVARCHAR50助教/讲师/副教授/教授联系电话sja_Tphone08NVARCHAR50-教师登录密码sja_Tpassword08NVARCHAR50考察/考试表 3-5 选课基本表 linc_ChooseClass08字段名数据类型长度约束学生学号sja_Sno08NVARCHAR50主键,外键课程编号sja_Cno08NVARCHAR50主键,外键成绩sja_Score08INT30~100表 3-6 上课基本表 linc_Teaching08字段名数据类型长度约束班级编号sja_CLno08NVARCHAR50主键,外键课程编号sja_Cno08NVARCHAR50主键,外键上课时间sja_Time08NVARCHAR50-上课地点sja_Place08NVARCHAR50-表 3-7 老师授课班级基本表 linc_Teaching08字段名数据类型长度约束班级编号sja_CLno08NVARCHAR50主键,外键教师编号sja_Tno08NVARCHAR50主键,外键表 3-8 老师授课课程基本表 linc_Teaching08字段名数据类型长度约束课程编号sja_Cno08NVARCHAR50主键,外键教师编号sja_Tno08NVARCHAR50主键,外键表 3-9 管理员基本表 linc_ctrlogin08字段名数据类型长度约束管理员登录用户名sja_Ctrno08NVARCHAR50主键,外键管理员登录密码sja_Ctrpassword08NVARCHAR50主键,外键3.3 关系模式的优化3.3.1 规范化处理考察关系模式的数据依赖集合,仅为函数依赖,上述关系模式都属于 BC 范式,无需规范化分解。3.3.2 模式的评价与修正1. 模式评价(1) 功能评价根据需求分析的结果,规范化后的关系模式可以支持用户的所有应用要求,且满足无损连接性。(2) 性能评价经过逻辑记录访问估算,观察到专业关系模式和班级关系模式经常需要执行连接操作,因此考虑在模式修正时合并两者。2. 模式修正为减少连接操作,提高查询效率,故将专业关系模式和班级关系模式合并。同时,考虑到专业名称和班级名称不会出现重名现象,故将班级编号作为主键,修改后得到专业班级关系模式如下:专业班级(班级编号,班级名称,专业编号,专业名称)在上述关系模式中班级编号决定专业编号,专业编号决定专业名称,班级编号决定专业名称,因此存在非主属性对主键的传递函数依赖,属于第二范式。但考虑到查询效率和专业名称使用的频率,不对该关系模式进行规范化。因此,关模式优化后最终的关系模式如下:四、物理结构设计4.1 聚簇设计聚簇是将有关的数据元组集中存放于一个物理块内或若干相邻物理块内或同一柱面内,以提高查询效率的数据存储结构。所谓聚簇设计,就是根据用户需求确定每个关系是否需要建立聚簇,如果需要,则应确定在该关系的哪些属性列上建立聚簇。当一个关系按照某些属性列建立聚簇后,关系中的元组都按照聚簇属性列的顺序存放在磁盘的一个物理块或若干相邻物理块内,因此对这些属性列的查询特别有效,它可以明显提高查询效率,但是对于非聚簇属性列的查询效果不佳。此外,数据库系统建立和维护聚簇的开销很大,每次修改聚簇属性列值或增加、删除元组都将导致关系中的元组移动其物理存储位置,并且重建该关系的聚簇。因此,只有在遇到以下一些特定情况时才考虑对一个关系建立聚簇:(1) 当对一个关系的某些属性列的访问时该关系的主要应用,而对其他属性的访问很少或是次要应用时,可考虑对该关系在这些属性列上建立聚簇;(2) 若一关系在某些属性列上的值重复率很高,则可考虑对该关系在这些组属性列上建立聚簇;(1) 若一关系一旦装入数据,某些属性列的值很少修改,也很少增加或删除元组,则可考虑对该关系在这些组属性列上建立聚簇。考虑到上述信息,对在每个关系模式的主键上建立聚簇。4.2 索引设计索引设计时数据库物理设计的基本问题,对关系选择有效的索引对提高数据 库访问效率有很大的帮助。索引也是按照关系的某些属性列建立的,它与聚簇的 不同之处在于,当索引属性列发生变化,或增加、删除元组时,只有索引发生变 化,而关系中原先元组的存放位置不受影响。此外,每个关系只能建立一个聚簇, 但却可以同时建立多个索引。 对于一个确定的关系,通常在下列情况下可以考虑建立索引:(1) 在主键属性列和外键属性列上通常都可分别建立索引,不仅有助于唯一 性检查和完整性检查,而且可以加快连接查询的速度;(2) 以查询为主的关系可建立尽可能多的索引;(3) 对等值连接,但满足条件的元组较少的查询可考虑建立索引;(4) 如果查询可以从索引直接得到结果而不必访问关系,则对此种查询可建 立索引。例如,为查询某个属性的 MIN, MAX, AVG, SUM, COUNT 等函数值,可在该属性列上建立索引。考虑到上述信息,对每个关系模式的外键都建立索引;同时,为满足最统计 同一地区学生数的需求,在学生关系模式的生源所在省和生源所在市的属性列上 分别建立索引;为满足经常查询的需求,在课程关系模式的开课学期和教师关系 模式的职称属性列上建立索引。4.3 分区设计数据库中的数据,包括关系、索引、聚簇、日志等,一般都存放在磁盘内, 由于数据量的增大,往往需要用到多个磁盘驱动器或磁盘阵列,这就产生了数据 在多个磁盘如何分配的问题,即磁盘分区设计问题。磁盘分区设计的本质市确定 数据库数据的存放位置,其目的市提高系统性能,是数据库物理设计的内容之一。 磁盘分区设计的一般原则是:(1) 减少访问冲突,提高 I/O 并行性。多个事务并发访问同一磁盘时,会产 生磁盘访问冲突而导致效率低下,如果事务访问数据能均匀分布于不同磁盘上, 则 I/O 可并发执行,从而提高数据库访问速度。(2) 分散热点数据,均衡 I/O 负担。在数据库中数据访问的频率是不均匀的, 那些经常被访问的数据称为热点数据,此类数据宜分散存放于不同的磁盘上,以 均衡各个磁盘的负荷,充分发挥多磁盘并行操作的优势。(3) 保证关键数据快速访问,缓解系统“瓶颈”。在数据库中有些数据如数 据字典等的访问频率很高,为保证对它的访问不直接影响整个系统的效率,可以 将其存放在某一固定磁盘上,以保证其快速访问。 由于高校成绩管理数据库系统的数据所需存储规模较小,因此不进行分区设 计。五、数据库实施创建数据库,如图 5-1 所示:图5-1 数据库建立5.1 基本表建立(1)教师表建立该表格包含两个列:`sja_Aacc08`和`sja_Apwd08`。`sjA_Aacc08`列是一个字符类型(CHAR),长度为12个字符,且不允许为空(NOT NULL)。它将用作表格的主键(PRIMARY KEY),这意味着每个记录在该列上必须具有唯一的值。`sja_Apwd08`列也是一个字符类型(CHAR),长度为10个字符。它使用了DEFAULT关键字,表示如果没有为该列提供值,则该列的默认值为NULL。因此,这个表格的主要目的是存储管理员账户的信息。每个管理员账户由一个唯一的12位字符编码(sja_Aacc08)和一个最长为10个字符的密码(sja_Apwd08)组成。图5-2 建立教师表(2) 专业表建立该表格包含两个列:`sja_Mno08`和`sja_Mname08`。`sja_Mno08`列是一个字符类型(CHAR),长度为10个字符,且不允许为空(NOT NULL)。它将用作表格的主键(PRIMARY KEY),这意味着每个记录在该列上必须具有唯一的值。`sja_Mname08`列也是一个字符类型(CHAR),长度为10个字符。它使用了DEFAULT关键字,表示如果没有为该列提供值,则该列的默认值为NULL。除了主键之外,还定义了一个约束(CONSTRAINT),名为`Major_Mno`。该约束确保`shengja_Majors08`表格中的`sja_Mno08`列的值是唯一的,即每个记录都必须具有不同的`sja_Mno08`值。这个表格的主要目的是存储专业(Major)的信息。每个专业由一个唯一的10位字符编码(sja_Mno08)和一个最长为10个字符的名称(sja_Mname08)组成。约束确保了每个专业编码的唯一性。图5-3 建立专业表(3) 班级表建立该表格包含三个列:`sja_Classno08`、`sja_Classname08`和`sja_Mno08`。`sja_Classno08`列是一个字符类型(CHAR),长度为10个字符,且不允许为空(NOT NULL)。它将用作表格的主键(PRIMARY KEY),这意味着每个记录在该列上必须具有唯一的值。`sja_Classname08`列也是一个字符类型(CHAR),长度为10个字符。它使用了DEFAULT关键字,表示如果没有为该列提供值,则该列的默认值为NULL。`sja_Mno08`列也是一个字符类型(CHAR),长度为10个字符。它使用了DEFAULT关键字,表示如果没有为该列提供值,则该列的默认值为NULL。除了主键之外,还定义了两个约束:1. UNIQUE约束,确保每个记录的组合值(sja_Mno08和sja_Classno08)都是唯一的。这意味着每个班级编号在给定的专业中必须是唯一的。2. FOREIGN KEY约束,将`sja_Mno08`列作为外键,引用了`shengja_Majors08`表格中的`sja_Mno08`列。这意味着`sja_Mno08`列的值必须存在于`shengja_Majors08`表格的`sja_Mno08`列中的某个记录中。同时,ON DELETE RESTRICT和ON UPDATE RESTRICT指定了在删除或更新`shengja_Majors08`表格中的记录时对关联的班级表格进行限制操作,即不允许删除或更新被引用的记录。因此,这个表格的主要目的是存储班级(Class)的信息。每个班级由一个唯一的10位字符编码(sja_Classno08)、一个最长为10个字符的名称(sja_Classname08)和对应的专业编码(sja_Mno08)组成。约束确保了班级编号和对应的专业编码的唯一性,并且与`shengja_Majors08`表格建立了外键关系。图5-4 建立班级表(4) 学生表建立该表格包含七个列:`sja_Sno08`、`sja_Sname08`、`sja_Ssex08`、`sja_Sage08`、`sja_Sorig08`、`sja_Scredits08`和`sja_Classno08`。`sja_Sno08`列是一个字符类型(CHAR),长度为12个字符,且不允许为空(NOT NULL)。它将用作表格的主键(PRIMARY KEY),这意味着每个记录在该列上必须具有唯一的值。`sja_Sname08`列是一个字符类型(CHAR),长度为20个字符。它表示学生的姓名。`sja_Ssex08`列是一个字符类型(CHAR),长度为5个字符。它表示学生的性别。`sja_Sage08`列是一个整数类型(INT),用于表示学生的年龄。`sja_Sorig08`列是一个字符类型(CHAR),长度为20个字符。它表示学生的来源地。`sja_Scredits08`列是一个整数类型(INT),表示学生的学分。`sja_Classno08`列是一个字符类型(CHAR),长度为10个字符。它表示学生所属的班级编号。除了主键之外,还定义了两个约束:1. UNIQUE约束,确保每个记录的组合值(sja_Sno08和sja_Classno08)都是唯一的。这意味着每个学生编号在给定的班级中必须是唯一的。2. FOREIGN KEY约束,将`sja_Classno08`列作为外键,引用了`shengja_Classes08`表格中的`sja_Classno08`列。这意味着`sja_Classno08`列的值必须存在于`shengja_Classes08`表格的`sja_Classno08`列中的某个记录中。同时,ON DELETE RESTRICT和ON UPDATE RESTRICT指定了在删除或更新`shengja_Classes08`表格中的记录时对关联的学生表格进行限制操作,即不允许删除或更新被引用的记录。因此,这个表格的主要目的是存储学生(Student)的信息。每个学生由一个唯一的12位字符编码(sja_Sno08)、一个最长为20个字符的姓名(sja_Sname08)、性别(sja_Ssex08)、年龄(sja_Sage08)、来源地(sja_Sorig08)、学分(sja_Scredits08)和所属班级编号(sja_Classno08)组成。约束确保了学生编号和所属班级编号的唯一性,并且与`shengja_Classes08`表格建立了外键关系。图5-5 建立学生表(5) 课程表建立图5-6 建立课程表(6) 报告表建立图5-7 建立报告表(7) 教师-班级表建立图5-8 建立教师-班级表(8) 学生-课程表建立图5-9 建立课程学习表(9) 教师-课程表建立图5-10 建立教师-课程表(10) 管理员表建立图5-11 创建登录表5.2 视图的建立(1)视图每门课程平均成绩统计的建立图5-10:每门课程平均成绩统计图5-11:学生成绩图5-12:每门课程学分统计图5-13:教师教授课程统计图5-14:班级开设课程统计v图5-15:学生生源地统计图5-16:教师课程成绩统计5.3 索引的建立图5-17:表教师唯一索引的建立图5-18:其他表唯一索引的建立5.4 触发器建立(1)更新学分:图5-19:更新学分触发器建立(2)删除学生:图5-20:删除学生触发器的建立5.5存储过程建立自动计算学分:图5-21:自动计算学分创建学生信息:图5-22:创建学生信息创建教师信息:图5-23:创建教师信息5.6 业务处理和查询功能SQL语句1)学生成绩按每学年进行成绩统计的SQL语句:图5-24学生成绩按每学年进行成绩统计运行结果2)学生成绩名次排定SQL语句: 图5-25学生成绩名次排定运行结果3)每门课程平均成绩统计SQL语句:图5-26每门课程平均成绩统计运行结果4)学生所学课程及学分统计SQL语句:图5-27学生所学课程及学分统计运行结果5)输入每个学生成绩时,自动生成该学生已修总学分SQL语句:图5-28自动生成该学生已修总学分运行结果图5-29自动生成该学生已修总学分运行结果图5-30自动生成该学生已修总学分运行结果图5-31自动生成该学生已修总学分运行结果6)学生成绩查询SQL语句:图5-32学生成绩查询运行结果7)教师任课查询SQL语句:图5-33教师任课查询运行结果8)班级课程开设查询SQL语句:图5-34班级课程开设查询运行结果六、应用系统开发与试运行6.1 开发平台和开发环境介绍(1)硬件环境:处理器    Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz 2.59 GHz机带 RAM    16.0 GB (15.8 GB 可用)系统类型    64 位操作系统, 基于 x64 的处理器(2) 软件环境:系统:windows 10 64家庭教育版数据库软件:Microsoft SQLSever2014应用系统开发环境:IntelliJ IDEA 2019.1.1 x64, Tomcat 8.0.50,6.2 前台界面与后台数据库连接说明,代码实现Web端与SQL连接代码:const { Client } = require('pg');var sql = `SELECT r.sja_Cno08, c.sja_Cname08, Round(AVG(r.sja_Grade08),2) as AvgGradeFROM shengja.shengja_Reports08 rJOIN shengja.shengja_Courses08 c ON c.sja_Cno08 = r.sja_Cno08GROUP BY r.sja_Cno08, c.sja_Cname08; `;const client = new Client({ host: '192.168.198.129', port: 26000, database: 'shengjamis08', user: 'opengaussuser', password: 'openGauss@123',});// 连接数据库client.connect((err) => { if (err) { console.error('Failed to connect to database:', err); } else { console.log('Connected to database'); // 在连接成功后可以执行其他数据库操作 client.query(sql, (err, result) => { if (err) { console.error('Error executing query:', err); } else { console.log('Query result:', result.rows); } // 关闭数据库连接 // client.end(); }); }});module.exports = { query: (sql) => client.query(sql),};首先,通过`require('pg')`引入了`pg`库,它是一个用于连接和操作PostgreSQL数据库的Node.js库。然后,定义了一个SQL查询语句,该查询语句从表格`shengja_Reports08`和`shengja_Courses08`中检索数据,计算每个课程的平均成绩,并返回课程编号(sja_Cno08)、课程名称(sja_Cname08)和平均成绩(AvgGrade)。接下来,创建了一个`Client`对象,配置了连接数据库所需的信息,包括主机名、端口号、数据库名称、用户名和密码。使用`client.connect()`方法连接到数据库。如果连接成功,输出"Connected to database"。如果连接失败,输出"Failed to connect to database"。在成功连接数据库后,使用`client.query()`方法执行SQL查询。传入查询语句和一个回调函数作为参数。回调函数用于处理查询结果。如果查询成功,输出查询结果的行数据;如果查询失败,输出错误信息。最后,通过`module.exports`将`query`方法导出,使其可以在其他模块中使用。`query`方法接受一个SQL语句作为参数,并使用`client.query()`方法执行该查询。总体而言,以上代码的功能是连接到指定的PostgreSQL数据库,执行给定的SQL查询语句,并将查询结果输出到控制台。6.3 系统各功能设计和运行界面截图1) 登陆界面在正式进入系统前,系统会要求用户输入账号和密码进行登录。图6-1系统登录界面2) 欢迎界面进入系统后,对用户显示欢迎信息。图6-2系统登录界面3) 学生成绩查询界面-学年成绩查询展示所选学年中学生学号,选修课程以及成绩图6-3学年成绩查询界面4) 学年排名查询界面展示所选学年学生的平均绩点以及排名图6-4学年排名查询界面5) 指定学号查询界面展示指定学生的课程成绩信息图6-5指定学号查询界面6) 学生成绩编辑界面修改编辑所选学生指定课程成绩图6-6学生成绩编辑界面7) 学生成绩插入及删除界面插入及删除所选学生选课信息以及成绩图6-7学生成绩插入界面图6-8学生成绩插入结果界面图6-9学生成绩删除界面8) 课程平均成绩查询界面查询各课程学生平均成绩图6-10课程平均成绩查询界面9) 班级课程查询界面查询指定班级开设课程图6-11班级课程查询界面10) 生源地统计界面统计学生生源地图6-12生源地统计界面11) 教师任课查询界面查询指定教师或所有教师任课信息图6-13教师任课查询界面
  • [热门活动] 【数据库专题直播有奖提问】DTSE Tech Talk 技术直播 NO.48:看直播提问题赢华为云定制长袖卫衣、华为云定制保温杯等好礼!
    中奖结果公示感谢各位小伙伴参与本次活动,本次活动获奖名单如下:请获奖的伙伴在11月20日之前点击此处填写收货地址,如逾期未填写视为弃奖。再次感谢各位小伙伴参与本次活动,欢迎关注华为云DTSE Tech Talk 技术直播更多活动~直播简介【直播主题】openGemini全新列存引擎,为您解决时序数据高基数难题【直播时间】2023年11月15日 16:30-18:00【直播专家】黄飞腾 华为云数据库DTSE技术布道师【直播简介】在数据库中,基数是指一列数据中唯一值的个数,高基数即表示该列中唯一值的数量非常大,常见的比如IP地址、电子邮件等。高基数问题长期困扰着众多时序数据库产品,主要表现为索引膨胀,内存资源消耗增加,读写性能下降等,openGemini 全新列存引擎,旨为解决高基数问题,性能表现出色。本次直播主要分享高基数场景的问题与挑战,以及 openGemini 列存引擎的设计思路、最佳实践等。直播链接:cid:link_1活动介绍【互动方式】直播前您可以在本帖留下您疑惑的问题,专家会在直播时为您解答。直播后您可以继续在本帖留言,与专家互动交流。我们会在全部活动结束后对参与互动的用户进行评选。【活动时间】即日起—2023年11月16日【奖励说明】评奖规则:活动1:直播期间在直播间提出与直播内容相关的问题,对专家评选为优质问题的开发者进行奖励。奖品:华为云定制长袖卫衣活动2:在本帖提出与直播内容相关的问题,由专家在所有互动贴中选出最优问题贴的开发者进行奖励。奖品:华为云定制保温杯更多直播活动直播互动有礼:官网直播间发口令“华为云 DTSE”抽华为云定制钢笔礼盒、填写问卷抽华为云定制鼠标等好礼【注意事项】1、所有参与活动的问题,如发现为复用他人内容或直播间中重复内容,则取消获奖资格。2、为保证您顺利领取活动奖品,请您在活动公示奖项后2个工作日内私信提前填写奖品收货信息,如您没有填写,视为自动放弃奖励。3、活动奖项公示时间截止2023年11月17日,如未反馈邮寄信息视为弃奖。本次活动奖品将于奖项公示后30个工作日内统一发出,请您耐心等待。4、活动期间同类子活动每个ID(同一姓名/电话/收货地址)只能获奖一次,若重复则中奖资格顺延至下一位合格开发者,仅一次顺延。5、如活动奖品出现没有库存的情况,华为云工作人员将会替换等价值的奖品,获奖者不同意此规则视为放弃奖品。6、其他事宜请参考【华为云社区常规活动规则】。
  • [问题求助] 华为云数据库和GaussDB数据库的区别
    华为云数据库和GaussDB数据库的区别
  • [问题求助] 华为云RDS数据库是否支持弹性伸缩?如何实现?
    华为云RDS数据库是否支持弹性伸缩?如何实现?
  • [问题求助] 默认情况下,每个用户在华为云RDS中最多可以创建多少个数据库实例?
    默认情况下,每个用户在华为云RDS中最多可以创建多少个数据库实例?
  • [问题求助] 华为云RDS数据库的备份文件存储在何处,是否对租户可见?
    华为云RDS数据库的备份文件存储在何处,是否对租户可见?
总条数:553 到第
上滑加载中