postgreSQL / PostGIS数据库:表继承

时间:2018-07-22 20:01:23

标签: sql database postgresql inheritance postgis

我对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为 设置为ie。植物,那么resourceGroup和name字段中的输入值仅限于分别引用植物名和植物群的查找表,反之亦然?

2)

另一种潜在的继承表方案涉及表文档。该表存储有关不同类型的文档编制方法(即)的信息和URL。报告 AV,图像,表格等。这里的问题是,某些文档类型(例如报表和AV)与另一个主要实体(即)共享多对多关系。 图像和形式是一对多的。除此之外,它们共享相同类型的属性信息

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

3)

此表方案与某些存储文化敏感信息的表有关。这些属性中的某些属性基本上有三个访问限制    桌子:公众,仅男性和女性。

问题:继承还是这里的前进之路。就是为男性和女性分别创建两个子表,这些表继承父项的全部或部分属性 表。然后,您可以分别加密男女子表?或者,一种更简单或更佳的解决方案是考虑 模式级别的性别和公共受限访问。所以。为每种工作类型(即护林员工作,计划等)分别创建一个男女模式和小组角色,以及一个 存储对公众开放的信息。

谢谢。

最佳 里克。

1 个答案:

答案 0 :(得分:0)

  1. 生态/动植物/植物群:

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

  2. 文档:

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

  3. 男女可见的信息:

    用继承不能很好地建模。如果要基于数据库角色将可见性限制为表行,请查看“行级安全性”。