我对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)
此表方案与某些存储文化敏感信息的表有关。这些属性中的某些属性基本上有三个访问限制 桌子:公众,仅男性和女性。
问题:继承还是这里的前进之路。就是为男性和女性分别创建两个子表,这些表继承父项的全部或部分属性 表。然后,您可以分别加密男女子表?或者,一种更简单或更佳的解决方案是考虑 模式级别的性别和公共受限访问。所以。为每种工作类型(即护林员工作,计划等)分别创建一个男女模式和小组角色,以及一个 存储对公众开放的信息。
谢谢。
最佳 里克。
答案 0 :(得分:0)
生态/动植物/植物群:
我认为继承是建模的一种可能方法。不过,您似乎错误地定义了表:ecology
表应该具有动植物都具有的属性,并且只能在添加的继承子代中指定那些行。
文档:
这也可以用于继承。由于所有继承子项本身都是表,因此它们可以具有与其他表的外键约束。
男女可见的信息:
用继承不能很好地建模。如果要基于数据库角色将可见性限制为表行,请查看“行级安全性”。