【问题标题】:postgreSQL/PostGIS database: Table inheritancepostgreSQL/PostGIS 数据库:表继承
【发布时间】:2018-07-22 20:01:23
【问题描述】:

我对 postgreSQL 和数据库设计相对较新,目前对 INHERITANCE 的方法以及将其应用于 postgreSQL/ 中的某些表是否相关或合适感到困惑 我目前正在创建的 PostGIS 数据库。我将不胜感激任何建议。

我不确定的三个表格场景如下:

1) 第一个案例是包含有关动植物信息的生态表(见下文)。除 resourceGroup 和 name 属性外,所有属性都采用相同类型的输入值 不管记录是指植物群还是动物群。 resourceGroup 和名称中的值是指来自不同查找表的值,这些查找表特定于动物群或植物群。

CREATE TABLE "ecology" (  
   "ecology_id" serial  NOT NULL,  
   "resourceType" varchar(5)  # ie. flora, fauna  
   "resourceUse" varchar(20)  NOT NULL,  
   "resourceGroup" varchar(20) NOT NULL # takes input from different lookup tables depending if it is  flora (ie. roots, seeds...) or fauna (ie. mammal, reptile ..)  
   "native" boolean  NOT NULL,  
   "name" varchar(30)  NOT NULL, # ie species name  
   "englishName" varchar(30)  NOT NULL,  
   "NTStatus" varchar(20)  NOT NULL,  
   "description" varchar(255)  NOT NULL,  
   CONSTRAINT "ecology_pk" PRIMARY KEY ("ecology_id")  
);  

问题:这里的答案是继承吗,即。

CREATE TABLE "fauna" (  
  "faunaGroup" varchar(5)   
  "name" varchar(30)  NOT NULL,  
  "englishName" varchar(30)  NOT NULL) INHERITS(ecology);  

..和植物群类似,然后从生态表中删除这些属性。或者有没有办法在生态表上指定一个约束,当resourceType是 设置为即。植物区系,那么resourceGroup和name字段中的输入值被限制在分别引用植物区系名称和植物区系组的查找表中,反之亦然?

2)

其他潜在的继承表方案参考表文档。此表存储有关不同类型文档方法的信息和 url,即。报告 AV、图像、表格等。这里的问题是某些文档类型,例如报告和 AV,与另一个主要实体共享多对多关系,而 ie。 图像和表格是一对多的。除此之外,它们共享相同类型的属性信息

问题:继承是解决不同类型关系的方法,还是应该将它们全部组合在一个表(文档)中并将所有关系视为多对多关系?

3)

此表格方案涉及某些存储文化敏感信息的表格。这些中的某些属性基本上存在三个访问限制 表:公共、仅限男性和仅限女性。

问题:继承可以再次成为前进的方向。 IE。分别为男性和女性创建两个子表,继承父级的全部或部分属性 桌子。然后,您可以分别对 men 和 women 子表进行加密吗?或者,一个更简单或更好的解决方案是考虑 图式级别的性别和公共限制访问。所以即。为每种工作类型(即护林员工作、计划等)分别创建一个男性和女性模式和组角色,以及一个模式 存储向公众开放的信息。

提前致谢。

最好的 瑞克。

【问题讨论】:

    标签: sql database postgresql inheritance postgis


    【解决方案1】:
    1. 生态/动物/植物:

      我认为继承是一种可能的建模方式。不过,您似乎把表定义弄错了:ecology 表应该具有动物和植物都具有的属性,并且您只在添加的继承子项中指定那些行。

    2. 文档:

      这也适用于继承。由于所有继承子节点本身就是表,因此它们可以与其他表具有外键约束。

    3. 男性或女性可见的信息:

      这不能用继承很好地建模。如果您想根据数据库角色限制对表行的可见性,请查看行级别安全性。

    【讨论】:

    • 感谢 Laurenz。这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2010-09-05
    • 2013-01-25
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多