开发者社区 问答 正文

请教 CREATE TABLE measurement ( city_id int not null, logdate date not null, peaktemp int, unitsales int ); 这种方式可以多对多继承

请教 CREATE TABLE measurement (

city_id         int not null,
logdate         date not null,
peaktemp        int,
unitsales       int

);

这种方式可以多对多继承

CREATE TABLE measurement (

city_id         int not null,
logdate         date not null,
peaktemp        int,
unitsales       int

) PARTITION BY RANGE (logdate);

这种只能是一主对多从?

本问题来自云栖社区【PostgreSQL技术进阶社群】。https://yq.aliyun.com/articles/690084 点击链接欢迎加入社区大社群。

展开
收起
游客886 2019-04-12 10:28:36 1723 分享 版权
阿里云 AI 助理回答

在数据库中,"继承"一词通常与对象关系数据库系统(如PostgreSQL)中的表结构设计相关,而不是指传统意义上的面向对象编程中的继承概念。在这里,PostgreSQL的“继承”功能允许一个表(称为子表或派生表)自动继承另一个表(称为父表或基表)的所有列、索引、约束等特性。子表可以在此基础上添加自己的列和约束,形成扩展的表结构。

您提到的两个CREATE TABLE语句展示了两种不同的表设计方式:

  1. 基础表创建:

    CREATE TABLE measurement (
       city_id         int not null,
       logdate         date not null,
       peaktemp        int,
       unitsales       int
    );
    

    这是一个标准的表创建语句,没有使用到继承特性。它定义了一个名为measurement的表,包含四个列。

  2. 分区表创建:

    CREATE TABLE measurement (
       city_id         int not null,
       logdate         date not null,
       peaktemp        int,
       unitsales       int
    ) PARTITION BY RANGE (logdate);
    

    这个语句创建了一个分区表。分区是将一个大表物理上分割为多个较小、更易管理的部分的过程,每个部分(分区)存储着满足特定条件的数据行。在这个例子中,measurement表根据logdate列的值范围进行分区。这有助于优化查询性能,特别是在处理大量数据时。

关于您的问题,“多对多继承”的表述可能有些误导。在PostgreSQL中,表继承是一种一对一或多对一的关系,即一个父表可以有多个子表,但一个子表只能有一个直接的父表。这意味着,从继承的角度看,并不存在“多对多继承”的概念。

至于分区,它实际上不是一种继承关系,而是数据组织的一种策略。分区表本身并不涉及继承其他表的列或属性,而是将单个逻辑表的数据分布到多个物理子表中,这些子表(分区)共同构成整个逻辑表。因此,说分区是“一主对多从”更准确地描述了数据如何被组织,而不是描述继承关系。

总结来说,第一种是基本表定义,第二种是基于日期范围的分区表定义,两者都是针对表结构的设计方法,而“继承”特性和“分区”是解决不同问题的工具,不涉及“多对多继承”的概念。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答