【PostgreSQL】数据基石:PostgreSQL的数据类型与表结构设计

目录

 核心数据类型深入探索

基础数值与文本类型

日期与时间类型

特殊与复合类型

JSON与HSTORE

表的创建、修改与管理

创建与修改表结构

索引与性能优化

约束与数据完整性


 核心数据类型深入探索

     PostgreSQL以其多样化的数据类型著称,不仅包括标准SQL数据类型,还有许多独特的高级类型,为数据建模提供了极高的灵活性。

基础数值与文本类型
  • 整型与浮点型integerbigint满足大多数整数需求,而realdouble precision适合存储浮点数。例如,创建一个存储交易金额的表:

    CREATE TABLE transactions (transaction_id serial PRIMARY KEY,amount numeric(10, 2) NOT NULL
    );

    字符类型varchar(n)用于变长字符串,text则无长度限制。使用char(n)固定长度字符串时需谨慎,因为未填满的空间会被空格填充。

    CREATE TABLE notes (note_id serial PRIMARY KEY,content text
    );
    日期与时间类型

    PostgreSQL提供多种时间相关类型,如timestampdatetime,且支持时区。例如,记录事件发生的时间戳:

    CREATE TABLE log_entries (entry_id serial PRIMARY KEY,event_time timestamp with time zone DEFAULT now()
    );
    特殊与复合类型
  • 数组类型:允许在单个列中存储同一类型元素的集合,如存储多电话号码。

    CREATE TABLE contacts (contact_id serial PRIMARY KEY,phone_numbers varchar(15)[]
    );

    枚举类型:用于存储预定义的值列表,增强数据一致性。

    CREATE TYPE status AS ENUM ('active', 'inactive', 'pending');CREATE TABLE users (user_id serial PRIMARY KEY,status status NOT NULL DEFAULT 'pending'
    );
    JSON与HSTORE
  • JSON & JSONB:原生支持JSON数据存储,其中JSONB提供了更好的查询性能。
CREATE TABLE products (product_id serial PRIMARY KEY,details jsonb
);
  • HSTORE:轻量级键值对存储,适用于简单元数据。
    CREATE TABLE books (book_id serial PRIMARY KEY,meta_data hstore
    );
    表的创建、修改与管理

          理解如何有效地创建、调整表结构,以及如何管理索引和约束,是数据库设计的关键。

    创建与修改表结构
  • 表创建:明确指定列的数据类型、约束条件,如外键。
CREATE TABLE orders (order_id serial PRIMARY KEY,customer_id integer REFERENCES customers(customer_id),order_date date NOT NULL
);
  • 修改表:使用ALTER TABLE添加新列、修改列属性或删除列。
    ALTER TABLE orders ADD COLUMN total_amount numeric(10, 2);
    索引与性能优化
  • 索引策略:基于查询模式选择合适类型的索引,如B-tree用于等值查询,GIN用于全文搜索。

    CREATE INDEX idx_orders_customer_id ON orders USING btree (customer_id);
  • 覆盖索引:当索引包含查询所需的所有列时,可以避免访问表数据,提升性能。

  • 常见约束:唯一约束(UNIQUE)、非空约束(NOT NULL)、检查约束(CHECK)确保数据质量。

约束与数据完整性

常见约束:唯一约束(UNIQUE)、非空约束(NOT NULL)、检查约束(CHECK)确保数据质量。

ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email);

外键约束:维护引用完整性,链接相关表。 

ALTER TABLE orders ADD CONSTRAINT fk_customerFOREIGN KEY (customer_id) REFERENCES customers(customer_id);

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用可蒸发的电介质流体冷却IGBT

每天一篇行业发展资讯,让大家更及时了解外面的世界。 更多资讯,请关注B站/公众号【莱歌数字】,有视频教程~~ 电子系统的单相液冷却已经广泛应用了50多年。 流体广泛应用于不同的工业:电力电子中的介质油;企业服务器…

微软Win10 22H2六月更新补丁KB5039299来了!附完整更新日志

系统之家于6月26日发出最新报道,微软为 Windows 10 用户发布了六月的安全更新补丁KB5039299。22H2用户升级系统后,会发现版本号升至 19045.4598。此次更新针对影响任务栏上应用跳转列表、默认日语输入法编辑器等多个问题进行修复。接下来跟随小编看看此次…

红酒哲学:品味流转时光,探寻生活之深邃奥秘

在繁华的都市中,我们时常被各种声音和色彩所包围,追求着速度与激情。然而,在这喧嚣之中,总有那么一刻,我们渴望静下心来,品味一份不同的宁静与深度。这时,一杯雷盛红酒便成了我们与内心对话的桥…

免费分享:中国1:250万地质图(附下载方法)

中国1:250万地质图反映了中国区域地质构造面貌和基本特征,表示了中国区域地质的特色,地质编图的标准化程度较高,地质图的编制过程中充分采用了信息技术,反映了地质调查与科研的若干新进展与认识。 数据简介 本数据为空…

lmdeploy部署chatglm3模型并对话

lmdeploy部署chatglm3模型并对话 环境准备创建虚拟环境安装组件下载模型 chat启动模型并对话启动成api_server服务并对话启动成gradio服务 环境准备 使用30% A100 来运行chatglm3模型,采用lmdeploy来启动。 创建虚拟环境 # 创建虚拟环境 conda create -n langcha…

node初始化设置(简单高效)

npm config set prefix "E:\nodejs\node_global" npm config set cache "E:\nodejs\node_cache" 我比较喜欢实用nrm,所以直接指定了nrm的路径

中国历史气象灾害预警数据集

中国历史气象灾害、预警风险区数据,包括:雷暴预警、大雾预警、洪涝风险、地质灾害趋势预测分区、山洪风险、森林火险、暴雨范围、大雨范围、地质风险、高温风险、低温冻害灾情、低温冷害和雪灾等。属性表包括各预警类型、具体时间、时效等。数据从国家突…

【八股系列】探索响应式布局的奥秘:关键技术与实战代码示例

🎉 博客主页:【剑九 六千里-CSDN博客】 🎨 上一篇文章:【为什么组件中的 data 必须是一个函数,然后 return 一个对象,而 new Vue 实例里,data 可以直接是一个对象?】 🎠 …

使用 Elastic ELSER 和 Llama3 的 RAG(使用 Langchain)

在之前的文章 “使用 Llama 3 开源和 Elastic 构建 RAG”,我们讲到了如何使用 Liama3 来结合 Elastic ELSER 来进行 RAG。在今天的文章里,我们来详细使用一个 notebook 来展示如何在本地 Elasticsearch 部署中进行实现。 此交互式 notebook 使用 Langch…

人工智能在医学图像分割中的最新研究进展|顶刊速递·24-06-26

小罗碎碎念 今日推文主题——人工智能在医学图像分割领域中的最新研究进展。 今天的推文都来自同一个期刊——《Med Image Anal 》,最新的IF是10.7。 小罗观点 今天的六篇文献都是直接面向实际应用场景的,可以针对你自己的研究课题选择合适的文章进行阅读…

【学习】科大睿智解读ITSS通过后仍需关注和改进IT服务的原因

为了确保IT服务的质量和效率,很多企业拿到ITSS资质证书后,仍然需要持续关注和改进IT服务,科大睿智总结主要原因有以下几点: 1、随着企业发展业务和市场行情的变化,可能涉及到运维服务中新的业务流程、技术需求或者用户…

机器学习算法(三):支持向量机(SVM)的sklearn调用

文章目录 前言一 理论1 sklearn中的核函数形式二、sklearn调用1 svm.SVC() 接口说明三 、具体示例1、简单的线性SVM例子 --- 不同C值的影响(1) 数据集(2) svm sklearn调用2、高斯核函数的SVM --- 非线性分类(1) 数据集(2) 高斯核函数的SVM3、sklearn调参技术--网格搜索…

华为云x86架构下部署mysql

华为云x86架构下部署mysql 1. 配置X86架构ESC2. 查看本系统中有没有安装mariadb相关的组件,有则卸载3. 安装mysql4. 启动mysql5. 登录MySQL,修改密码,开放访问权限 1. 配置X86架构ESC 2. 查看本系统中有没有安装mariadb相关的组件&#xff0c…

从理论到实践:工业工厂室外可燃气体报警器的校准方法

随着工业工厂对安全生产要求的不断提高,可燃气体报警器作为防范火灾、爆炸事故的重要设备,其准确性和可靠性显得尤为重要。 特别是在室外环境中,由于气候条件多变、设备老化等因素的影响,可燃气体报警器的性能可能会发生变化。因…

grpc学习golang版( 二、入门示例)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 文章目录 一、环境二、编写protobuf文件三、编写server服务端四、编写服务端五、测试 一、环境 确保环境已经配置完成,效果如下。不同环境可能导致后续生成的效果不一。 go version protoc --version…

深度解析:ChatGPT是如何理解和生成自然语言文章的?

引言 随着人工智能的发展,ChatGPT作为一种先进的自然语言处理工具,正逐渐改变人们与技术交互的方式。那么,ChatGPT是如何理解和生成自然语言文章的?本文将从其技术原理、训练过程、实际应用等多个角度,深入解析这一过…

49、基于归一化感知器的输入向量分类(matlab)

1、基于归一化感知器的输入向量分类的原理及流程 归一化感知器是一种分类算法,其原理基于感知器算法,但是在输入向量上进行了归一化处理,以提高算法的性能和稳定性。 流程如下: 输入向量归一化:对每个输入向量进行归…

手机远程控制另一台手机的全新使用教程(安卓版)

看完这篇文章,你可以了解到安卓手机如何远程控制安卓手机,以及苹果手机如何远程控制安卓手机。 如果想要用安卓手机远程管控苹果手机,或者苹果手机远程管控另一台苹果手机,请点击查看视频《手机远程管控另一台手机的全新使用教程…

如何提高搜索点击率:五个利用ChatGPT创造吸引眼球标题的小技巧

在当今信息爆炸的时代,如何让自己的文章在海量信息中脱颖而出,是每个内容创作者都在思考的问题。尤其是当读者面对无数个搜索结果时,标题成为吸引他们点击的第一步。那么,如何才能写出吸引眼球的标题,从而提高搜索点击…

数字化工厂生产管理看板系统如何优化生产流程

在当今高度数字化的时代,制造业正经历着深刻的变革,数字化工厂生产管理看板系统作为一种创新的工具,正在为优化生产流程发挥着关键作用。 数字化工厂生产管理看板系统是一个集数据采集、分析、展示和决策支持于一体的综合性平台。生产管理看板…