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

news2024/11/18 14:02:05

目录

 核心数据类型深入探索

基础数值与文本类型

日期与时间类型

特殊与复合类型

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_customer
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id);

 

 

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

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

相关文章

Nuxt3: 强制删除__NUXT_DATA__的一种方式

一、问题描述 环境:Node 18.14.0,Nuxt 3.12.2 with Nitro 2.9.6 后台粉丝提问,能否在Nuxt3的页面中不要生成__NUXT_DATA__,因为里面包含了接口返回的数据,感觉数据暴露并且加大了页面的html内容的大小: &l…

微软Win11 22H2/23H2六月更新补丁KB5039302发布!附完整更新日志

2024 年 6月 26 日最新消息,微软为 Windows 11 用户发布了六月最新的更新补丁KB5039302。对于 22H2 版本的用户,系统版本号将升级至 22621.3810;而对于 23H2 版本,版本号则提升至 22631.3810。此次更新将在“设置”主页上添加了新…

核密度估计kde的本质

核密度估计的本质就是插值,不是拟合,只是不要求必须过已知点。 核为box窗函数 核为高斯函数

用ChatGPT快速打造一个专业WordPress网站

作为一个使用HostEase多年的老用户,我想和大家分享一下如何利用HostEase和ChatGPT快速构建一个WordPress网站的经验。这不仅仅是一个简单的操作步骤,更是一次从零到有的实战经历。希望我的分享能给你们带来一些实用的帮助。 获取主机服务和域名 首先&a…

CST软件中滤波器中外部耦合偏小怎么办

在电磁仿真领域,CST Studio Suite(CST 工作室套装)软件以其强大的功能和易用性而广受工程师和科研人员的青睐。然而,在使用CST软件进行滤波器设计时,有时会遇到外部耦合偏小的问题,这可能导致滤波器的性能不…

GPT-5的即将登场

人工智能领域正经历着一场前所未有的变革,而其中大语言模型的进步尤为瞩目。继GPT-4取得巨大成功后,OpenAI即将推出的GPT-5被寄予厚望。作为新一代大语言模型,GPT-5在各个方面都有望实现显著突破。本文将探讨GPT-5的潜在特性、应用前景以及其…

求职季必读:毕业求职,这些坑你千万别踩

前言 毕业季,对于每一位即将步入社会的学子来说,都是一个充满挑战和机遇的时刻。作为我的一位好朋友也是好学长,他刚刚在一家顶尖科技公司斩获了他梦寐以求的职位。他深知求职路上的艰辛,因此打算把自己的经验分享给大家&#xf…

ClickHouse 24.5 版本发布说明

本文字数:12168;估计阅读时间:31 分钟 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse Shanghai User Group第1届 Meetup 讲师招募中,欢迎讲师在文末扫码报名&…

windows系统根据端口查询pid并结束进程 netstat taskkill

用管理员权限打开命令指示符,输入命令: 1、查看被占用端口所对应的 PID netstat -aon|findstr “端口号” 2、查看指定PID的进程 tasklist|findstr ”14816” 3、结束进程 taskkill -pid 进程号 -f

从零开始学习Linux(10)----动静态库

目录 1.制作静态库 1.编写源代码 2.编译 3.打包库 4.使用库 2.制作动态库 1.编译 2.打包库 3.总结 3.理解动态库加载 1.站在系统角度理解 2.谈谈编址,可执行程序 1.制作静态库 1.编写源代码 假设你编写了两个源代码文件mymath.c和myprintf.c以及它们对应…

数据平台发展史-从数据仓库数据湖到数据湖仓

做数据的同学经常听到一些数据相关的术语,常见的包括数据仓库,逻辑数据仓库,数据湖,数据湖仓/湖仓一体,数据网格 data mesh,数据编织 data fabric等. 笔者在这里回顾了下数据平台的发展史,也介绍和对比了下…

分享:Wordpress插件-AI Image Pro v2.6.0中文版语言包

AI Image Pro是一个wordpress插件,可将您的 WordPress 网站直接与最佳图像生成 A模型(DALL.E和稳定扩散)集成,并允许您利用 AI 生成图像、编辑(内画)图像和创建图像变体。最重要的是,它配备了许多一键式滤镜和许多微调选项,您可以使用它们来增强和创建令…

【JVM-1】JVM内存结构

目录 什么是JVMJava源码执行机制class文件的组成部分 JVM跨平台原理JVM的组成堆年轻代与老年代对象分配过程GC类型Full GC触发条件:对象进入老年代的触发条件 对象分配过程: 字符串常量池静态变量线程本地分配缓冲区(TLAB)TLAB相关…

昇思25天学习打卡营第3天 | 数据集 Dataset

数据是深度学习的基础,高质量的数据输入将在整个深度神经网络中起到积极作用。MindSpore提供基于Pipeline的数据引擎,通过数据集(Dataset)和数据变换(Transforms)实现高效的数据预处理。其中Dataset是Pipel…

【M1/M2】详细说明Parallels Desktop虚拟机的安装使用

希望文章能给到你启发和灵感~ 如果觉得有帮助的话,点赞+关注+收藏支持一下博主哦~ 阅读指南 开篇说明什么是Paralles Desktop一、基础环境说明1.1 硬件环境1.2 软件环境二、安装Parallels DeskTop2.1 下载软件安装包三、Parallels 下配置Windows 11 系统3.1 Windows 11安装3…

JavaScript学习笔记(四)

22、日期 JavaScript 日期输出,默认情况下,JavaScript 将使用浏览器的时区并将日期显示为全文本字符串: var data new Date();输出:Tue Jun 25 2024 14:45:44 GMT0800 (中国标准时间) 22.1 创建 Date 对象 Date 对象由新的 Da…

一键下单“鲜”到先得!生鲜电商小程序解决方案

随着消费者生活节奏的加快,以及移动互联网技术的普及,人们对于便捷、高效、个性化的生鲜购物体验需求日益旺盛。生鲜电商小程序以其独特的优势,正在改变着传统生鲜零售的格局,越来越多的消费者选择在线上购买生鲜食品,…

深圳比创达EMC|EMC与EMI滤波器:在电子设备中的平衡之道

随着科技的快速发展,电子设备已经深入到我们生活的方方面面,从家用电器到工业设备,从通信设备到医疗仪器,都离不开电子技术的支持。然而,电子设备在带来便利的同时,也面临着电磁兼容(EMC&#x…

全球最快的 JSON 文件查询工具

本文字数:1684;估计阅读时间:5分钟 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 介绍 在 ClickHouse,我们热衷于基准测试和性能优化。所以当我第一次看到 Hacker News 上那篇“查询大…

基于 JWT 进行身份验证

一、JWT 介绍 JWT 本质上就是一组字串,通过(.)切分成三个为 Base64 编码的部分: Header : 描述 JWT 的元数据,定义了生成签名的算法以及 Token 的类型。Payload : 用来存放实际需要传递的数据Signature(签…