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

 

 

  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何遇mirror

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值