定义数据库

最近更新时间:2019-04-29 15:39:39

数据库创建与管理

在 Snova 中,您可以创建自己的数据库对象。

  1. 若想要创建自己使用的数据库,首先需要参照 管理用户权限 中的方式创建用户并授权、登录,然后使用 CREATE DATABASE 语句进行数据库的创建,但是在创建数据库之前,必须保证登录的用户拥有 CRAETEROLE 的权限,权限问题参见 管理用户权限 。创建数据库示例如下:
    CREATE DATABASE test;
    通过\l可以列举出所有的数据库。
  2. 在创建数据库的过程中,往往会选择一个数据库模板对新数据库进行创建,默认的数据库模板为空。若模板数据库中有任何对象,则新创建的数据库中也会有相应的对象,也可以指定模板创建。例如先在 test 中使用下列语句创建一个表,
    create table ttable (age int, id int);
    然后以 test 为模板创建数据库 test2。
    CREATE TABLE test2 TEMPLATE test;
    切换到 test2 可以看到,test2 中也有 ttable,因此 template1 中尽量不要创建任何对象,否则以 template1 为模板创建出来的数据库会创建相应的对象,可以通过\d查看选中数据库中的所有表。
  3. 可以通过\l来列出所有的数据库。
  4. 可以通过 DROP DATABASE 删除数据库,进行删除操作时,必须确保登录的用户为超级用户或者是具有删除数据库权限的普通用户,并且,只有当该数据库的连接数为 0 时才能被删除。例如:

    可以看到当用户选择 test2 时,这时 test2 的连接数必然大于等于 1,切换到 test 后,才能正常删除 test2。

模式创建与管理

在 snova 中,模式 Schema 作为一个逻辑概念,是为了对数据库空间进行更加详细的划分而存在的,每个数据库在建立时拥有一个名为 pulibc 的模式。在一个数据库中,不能创建同名的表,但是如果选择在不同的 schema 中创建同名的表,则是被允许的,数据库系统是以 database.schema.table 的形式来标识一个表的,此外,不同的数据库下可以创建同名的 schema。

  1. 创建模式。
    CREATE SCHEMA testschema;
  2. 指定模式创建对象。
    创建表、函数等对象时,可以加上模式前缀来表示在不同模式下创建对象,不加时则默认表示在 public 下创建,例如:
    CREATE TABLE testschema.test;
  3. 设置模式的优先级。
    ALTER DATABASE test set search_path to testshcema,public;
    设置了数据库 test 所在的模式的优先级,表示优先级最高的模式为 testschema,不加任何模式前缀时,首先匹配 testschema。
  4. 模式的切换。
    SET search_path TO public;
    如果当前处于 testschema 模式,则可以通过该语句将模式切换到 public 下面。
  5. 删除模式。
    DROP SCHEMA testschema;

表创建与管理

  1. 设置表与列约束。
    • CHECH 约束,此约束可以指定某列数据必须满足某个表达式,例如:
      CREATE TABLE products (product_no int, name text, price int CHECK(price > 0));
    • NOT NULL 约束,此约束可以指定某列数据不能为空,例如:
       CREATE TABLE products (product_no int NOT NULL, name text NOT NULL, price int CHECK(price > 0));
  2. 数据分布策略。
    对于分布式数据库仓库来说,每个节点中存储的数据量相同时能够获得最好的处理性能。如果数据分布不平衡,那么数据量多的节点将会使用更多的时间去完成查询过程,从而导致整个查询过程性能的降低。
    • 哈希分布,使用 DISTRIBUTED BY 语法可以在创建表时指定哈希分布的方式,哈希分布的方式会将指定作为哈希分布的所有键进行组合,通过 hash 算法决定数据分布结果。语句如下:
      CREATE TABLE test (id int, age int) DISTRIBUTED BY (id);
    • 随机分布,使用 DISTRIBUTED RANDOMLY 语法可以在创建表时指定为随机分布的方式,顾名思义,通过随机的方式来决定数据分布结果。语句如下:
      CREATE TABLE test (id int, age int) DISTRIBUTED RANDOMLY;
      其中,拥有 PRIMARY KEY 或者 UNIQUE 的列必须指定其中一种数据分布策略,对于没有 PRIMARY KEY 和 UNIQUE 属性的列,将默认以第一列作为数据分布的参考,默认数据分布策略是哈希分布策略。

视图创建与管理

视图是一个逻辑上的概念,与表不同的是,视图在硬盘上没有实际的数据结构与之对应。

  1. 创建视图。

    CREATE VIEW testview AS SELECT * FROM ttable where age=28;

    以 ttable 中满足“age=28”这个条件的所有行建立视图 testview。

  2. 删除视图。

    DROP VIEW testview;