首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    编写高效SQL的三个基础原则

    在本文中,我将通过为表命名并通过规范化和约束避免数据错误,为高效的SQL编写奠定基础。 本系列的第二部分将介绍如何构建SQL以使其更易于阅读和调试。因此,让我们首先了解如何奠定基础。...前三种范式是: 第一范式 (1NF): 每一行和每一列都存储单个值,并且没有重复的行。第二范式 (2NF): 没有依赖于主键或唯一键一部分的列。...如果您更改表的主键或其唯一约束之一中的所有列,则会出现这种情况。在这种情况下,您正在更改行的标识符,因此其他值也可能会发生更改。 与糟糕的名称一样,未规范化的表在现有应用程序中难以更改。...一个表只能有一个主键。唯一约束: 与主键类似,唯一约束阻止您存储重复值。与主键不同,您可以在唯一列中存储空值,并且一个表可以有多个唯一约束。外键: 定义父子关系。...不幸的是,现有数据可能存在此规则为假的情况。如果是这样,添加约束将失败,您将需要花费大量时间来修复它。幸运的是,您可以使用一个技巧来阻止更多无效数据进入: 创建未验证的约束。

    6700

    编写高效SQL的三个基础原则

    在本文中,我将通过为表命名并通过规范化和约束避免数据错误,为高效的SQL编写奠定基础。 本系列的第二部分将介绍如何构建SQL以使其更易于阅读和调试。因此,让我们首先了解如何奠定基础。...前三种范式是: 第一范式 (1NF): 每一行和每一列都存储单个值,并且没有重复的行。第二范式 (2NF): 没有依赖于主键或唯一键一部分的列。...如果您更改表的主键或其唯一约束之一中的所有列,则会出现这种情况。在这种情况下,您正在更改行的标识符,因此其他值也可能会发生更改。 与糟糕的名称一样,未规范化的表在现有应用程序中难以更改。...一个表只能有一个主键。唯一约束: 与主键类似,唯一约束阻止您存储重复值。与主键不同,您可以在唯一列中存储空值,并且一个表可以有多个唯一约束。外键: 定义父子关系。...不幸的是,现有数据可能存在此规则为假的情况。如果是这样,添加约束将失败,您将需要花费大量时间来修复它。幸运的是,您可以使用一个技巧来阻止更多无效数据进入: 创建未验证的约束。

    8510

    类关键字SoapBodyUse,SqlCategory,SqlRowIdName,SqlRowIdPrivate

    每个数据类型类都必须指定一个SQL类别。创建新的数据类型类时,请使用与正在创建的数据类型最匹配的SQL类别值,或者,更好的做法是,将现有数据类型类子类化并继承其SQL类别。...详解此关键字覆盖用于ID列的默认SQL字段名。当一个持久化类被投影为一个SQL表时,每个对象的Object Identity值被投影为一个SQL列——Row ID列。...默认如果忽略此关键字,则该类的ID列的SQL字段名称为ID第三十六章 类关键字 - SqlRowIdPrivate指定这个类的ID列在投射到ODBC和JDBC时是否为隐藏字段。 仅适用于持久类。...详解如果该关键字为true,那么当表被投射到ODBC和JDBC时,ID列就是一个隐藏字段。...当一个持久化类被投影为一个SQL表时,每个对象的Object Identity值被投影为一个SQL列——Row ID列。

    46410

    SQL查询数据库(二)

    若要创建用户定义的函数,请在持久性InterSystems IRIS类中定义一个类方法。该方法必须具有文字(非对象)返回值。这必须是一个类方法,因为在SQL查询中将没有对象实例可以在其上调用实例方法。...所有指定的参数均充当输入参数。不支持输出参数。SQL函数必须返回一个值。...谓词可以包含对伪列%KEY,%VALUE或两者的引用。一些示例应有助于阐明如何使用FOR SOME%ELEMENT子句。以下返回其最喜欢的颜色包括“红色”的每个人的名字和最喜欢的颜色的列表。...表限制:无法使用快速选择来查询以下类型的表:链接表一个表,其主/数据映射具有多个节点具有映射到同一数据位置的多个字段的表(仅可使用%Storage.SQL来实现)字段限制:如果选择项列表中包含以下列,则无法使用...LogicalToStorage转换的字段地图数据输入使用检索码的字段一个其地图数据条目具有定界符的字段(不是%List存储)映射到一块嵌套存储的字段索引限制:如果选择项目列表仅由%ID字段和/或均映射到同一索引的字段组成

    2.3K30

    2022 最新 MyBatis 面试题

    2、 SQL 语句依赖于数据库, 导致数据库移植性差, 不能随意更换数据库。 4、MyBatis 框架适用场合: 1、 MyBatis 专注于 SQL 本身, 是一个足够灵活的 DAO 层解决方案。...11、Mybatis 是如何将 sql 执行结果封装为目标对象并返回的? 都有哪些映射形式? 第一种是使用 标签, 逐一定义数据库列名和对象属性名之间的映 射关系。...第二种是使用 sql 列的别名功能, 将列的别名书写为对象属性名。...有了列名与属性名的映射关系后, Mybatis 通过反射创建对象, 同时使用反射给 对象的属性逐一赋值并返回, 那些找不到映射关系的属性, 是无法完成赋值的。 12、如何执行批量插入?...27、简述 Mybatis 的插件运行原理,以及如何编写一个插件。

    14910

    基于JSON的Oracle数据库应用程序开发(与MongoDB兼容)

    关系模型缺乏这种灵活性:表具有静态的“形状”,应用程序更改需要修改表结构(例如添加新列),这通常涉及数据库管理员(DBA)。此外,现有数据可能需要进行修改以适应新的模式。...更重要的是,关系方法需要事先设计模式:应用程序的对象(例如“客户订单”)被规范化为存储对象值的表和列。一个应用程序对象通常被规范化为多个表。...此外,不同的文档可以具有不同的键/值对,使得通过在运行时添加新的键/值对而无需修改现有数据/文档,从而轻松地演化应用程序。因此,使用文档来持久保存数据为开发人员提供了灵活的存储机制。...另一个处理JSON的需求来自于基于JSON的API的普及性:REST服务使用JSON输入和输出。如果将这些JSON值映射到表中,如果第三方API发生更改并且不再与表匹配,应用程序可能会出现问题。...一个“IS JSON” SQL检查约束确保列只包含有效的JSON文档,允许数据库理解该列正在用作JSON文档的容器。 Oracle的JSON功能侧重于为灵活架构的开发和基于文档的存储提供全面支持。

    23630

    SqlAlchemy 2.0 中文文档(七十九)

    关闭并且其底层的 DBAPI 资源返回到连接池,此时隔离级别将重置回默认值。...使用 keep_existing,返回现有的 Table,但不添加额外的构造元素 - 这些元素仅在新创建 Table 时应用。...由于这种损坏,行将带有所有对应于“child”的列设置为 NULL 的列 - 这现在是被填充的值,而不是父表中的值。 #1892 映射到具有两个或更多同名列的连接需要明确声明。...#1892 映射到具有两个或更多同名列的连接需要明确声明 这与#1892中的先前更改有些相关。在映射到连接时,同名列必须明确链接到映射属性,即如映射一个类到多个表中所述。...使用 keep_existing,返回现有的 Table,但不添加额外的构造元素 - 这些元素仅在创建新 Table 时应用。

    10310

    SQL命令 CREATE TABLE(二)

    全局临时表的表定义与基表相同。全局临时表必须具有唯一的名称;尝试为其提供与现有基表相同的名称会导致SQLCODE-201错误。该表将一直存在,直到显式删除(使用DROP TABLE)。...在Studio中,例程名称前缀显示为SqlRoutinePrefix值。 仅支持兼容性选项 SQL仅接受以下CREATE TABLE选项用于解析,以帮助将现有SQL代码转换为 SQL。...不能使用CREATE TABLE创建嵌入式串行对象。 注:我们建议避免创建列超过400列的表。...下面的示例显示 IRIS如何处理仅标点符号不同的字段名称。...指定的数据类型将字段允许的数据值限制为适合该数据类型的值。 SQL支持大多数标准SQL数据类型。本参考的数据类型部分提供了支持的数据类型的完整列表。

    74720

    SqlAlchemy 2.0 中文文档(五)

    其中一个典型示例是将 Python 的str数据类型映射到不同长度的VARCHAR SQL 类型。另一个是将不同种类的decimal.Decimal映射到不同大小的NUMERIC列。...其中一个典型示例是将 Python str数据类型映射到不同长度的VARCHAR SQL 类型。另一个示例是将不同种类的decimal.Decimal映射到不同大小的NUMERIC列。...然后,Enum SQL 类型知道如何生成一个带有适当设置的配置版本,包括默认字符串长度。如果传递的 typing.Literal 不仅包含字符串值,则会引发一个信息性错误。...一个典型的例子是将 Python 的str数据类型映射到不同长度的VARCHAR SQL 类型。另一个是将不同种类的decimal.Decimal映射到不同大小的NUMERIC列。...- 适用于命令式表 将额外的列附加到现有的声明式映射类 在现有的映射生成Table元数据之后,声明性表配置允许向其添加新的Column对象。

    29710

    SqlAlchemy 2.0 中文文档(十)

    也就是说,如果一个记录 PtoQ 被映射到“p”和“q”表,其中它基于“p”和“q”的 LEFT OUTER JOIN 有一行,如果进行一个 UPDATE 来修改现有记录中“q”表中的数据,那么“q”中的行必须存在...该列会递增或以其他方式更新其值。...这是一个可选的仅位置参数,如果存在,必须是传递的第一个位置参数。如果省略,则将使用 mapped_column() 映射到的属性名称作为 SQL 列名。...sort_order – 表示当 ORM 创建Table时,此映射列应如何与其他列排序的整数。对于具有相同值的映射列,默认使用默认排序,首先放置在主类中定义的映射列,然后放置在超类中的映射列。...另请参阅 级联 如何遍历与给定对象相关的所有对象? - 演示了一个通用函数,用于遍历所有对象而不依赖于级联。 attribute class_: Type[_O] 此Mapper映射到的类。

    24910

    Spring认证中国教育管理中心-Spring Data R2DBC框架教程六

    它允许创建新实例,因为 Kotlin 生成copy(…)创建新对象实例的方法,该方法从现有对象复制所有属性值并将作为参数提供的属性值应用到该方法。...将com.bigbank.SavingsAccount类映射到SAVINGS_ACCOUNT表名。相同的名称映射应用于将字段映射到列名称。例如,firstName字段映射到FIRST_NAME列。...通过创建您自己的实例,您可以注册 Spring 转换器以将特定类映射到数据库或从数据库映射。...该NamingStrategy控件类和属性的名称是如何地转化为表和列的名称。...Spring DataEnum默认将String值转换为最大可移植性的值。要保留实际枚举值,请注册一个@Writing转换器,其源和目标类型使用实际枚举类型以避免使用Enum.name()转换。

    2.1K20

    mybatis练习题

    优点: 基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设 计造成任何影响,SQL 写在 XML 里,解除 sql 与程序代码的耦合,便于统一管 理;提供 XML 标签,支持编写动态...缺点: SQL 语句的编写工作量较大,尤其当字段多.关联表多时,对开发人员 编写 SQL 语句的功底有一定要求。 SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。...但是灵活的前提是 Mybatis 无法做到数 据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套 SQL 映 射文件,工作量大。...使 用#{}可以有效的防止 SQL 注入,提高系统安全性 Mybatis 是如何将SQL 执行结果封装为目标对象并返回的?都有哪些映射形式?...第一种是使用标签,逐一定义数据库列名和对象属性名之间 的映射关系。 第二种是使用标签和 SQL 列的别名功能,将列的别名书写为 对象属性名。

    5510

    如何使用 JPA 和 Hibernate 将 Java Enum 映射到自定义值

    如何使用 JPA 和 Hibernate 将 Java Enum 映射到自定义值 1、引言 在本文中,我们将探讨如何在使用 JPA 和 Hibernate 时,将 Java Enum 映射到自定义值。...status 列存储与给定 PostStatus Enum 值相关联的数值,但该值不是 Java Enum 对象的典型序数值。...3、如何使用 JPA 和 Hibernate 将 Java Enum 映射到自定义值 默认情况下,Hibernate 使用 EnumType 来确定是使用 Enum 名称还是序数来持久化 Enum 到底层数据库列中...为了实现使用自定义序数值的目标,我们将使用 Hypersistence Utils 项目中的 CustomOrdinalEnumConverter,其代码如下: public abstract class...例如,如果你的应用程序之前使用的是持久化到数据库中的默认序数值,重新排序 Enum 值会破坏应用程序,除非更新 post 表中的现有 Enum 列值或使用自定义 AttributeConverter 实例

    7010

    关系型数据库设计小结

    一、需求分析 尽可能地收集需求,以及定义你的数据库的最终目的。 比如要开发书店查询应用,就要先知道应用有什么需求, 如如何添加书籍,如何查询现有书籍,如何查询订单,生成的报告格式如何,等等。...以前面的例子来说,我们一开始可能会考虑建立一个名为Mothers的表, 其中保存了母亲的信息如年龄,姓名,血型等,对于其下的小孩,可以创建不同的列,如老大,老二,老三… 但这样我们会面临一个问题,即列的数量是不确定的...精炼及规格化 当设计好一个数据库或者拿到已有的数据库时,我们可能会想要: 增加更多的列 为某个表中的可选数据创建一个新表并建立一对一关系 将一个大表分裂为两个小表 … 在进行这些操作时,下列的规则就可以作为参考...同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。 如果出现重复的属性, 就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。...其他 通常我们可以通过对指定的列创建索引来加快数据库的读取和查询速度。

    2.4K40

    MyBatis-2. Mapper XML文件

    如果列名和属性名没有精确匹配,可以在 SELECT 语句中对列使用别名(这是一个 基本的 SQL 特性)来匹配标签。比如:。...id property="id" column="post_id"/> id 和 result 都将一个列的值映射到一个简单数据类型...javaType 一个 Java 类的完全限定名,或一个类型别名(参考上面内建类型别名的列 表) 。如果你映射到一个 JavaBean,MyBatis 通常可以断定类型。...select 另外一个映射语句的 ID,可以加载这个属性映射需要的复杂类型。获取的 在列属性中指定的列的值将被传递给目标 select 语句作为参数。表格后面 有一个详细的示例。...notNullColumn 默认情况下,子对象仅在至少一个列映射到其属性非空时才创建。 通过对这个属性指定非空的列将改变默认行为,这样做之后Mybatis将仅在这些列非空时才创建一个子对象。

    2.7K30

    Hibernate框架学习之注解映射实体类

    length:指定该属性映射到数据表中的列所能保存数据的最大长度,默认是255 默认情况下,我们不使用@Column修饰属性的时候,hibernate会自动以该属性的名称映射到数据表中的列。...**我们也可以使用注解@Transient修饰属性**,它指明了该属性不会被映射到数据表中某一列,而只是作为一个属性被定义在实体类中。...user_id,该字段是address表的值依赖于userinfo表的id主键列的值。...总的来说,一旦hibernate发现实体类中有集合类型的属性需要映射,那么就会为集合属性单独映射出一张表,该表至少有两个字段,一个字段依赖于主表的id字段值,在新表中相同该字段值的记录共同组合成为实体类中的集合属性的值...2、组件属性映射 所谓的组件类型就是指我们自定义的类类型,在某些情况下,实体类中包含自定类型也是很常见的,那么对于我们自定义的类型该如何来映射到数据表呢?

    3.2K90

    MySQL8.0大表秒加字段,是真的吗?

    前言: 很早就听说 MySQL8.0 支持快速加列,可以实现大表秒级加字段。笔者自己本地也有8.0环境,但一直未进行测试。本篇文章我们就一起来看下 MySQL8.0 快速加列到底要如何操作。...所以大表 DDL 仍是一件令 DBA 头痛的事。 听闻 MySQL 8.0 解决了这件令 DBA 头痛的事,那让我们来详细了解下吧。想了解新功能,最简单的方法就是查阅官方文档。...关于列的 DDL 操作,是否支持 instant 等算法,官方文档给出了一个表格,现整理如下,星号表示不是全部支持,有依赖项。...只能顺序加列, 仅支持在最后添加列,而不支持在现有列的中间添加列。 不支持压缩表,即该表行格式不能是 COMPRESSED。 不支持包含全文索引的表。 不支持临时表。...不支持那些在数据字典表空间中创建的表。

    2.9K70
    领券