【发布时间】:2017-11-13 12:53:44
【问题描述】:
使用的示例并不代表我实际解决的领域;只是举例。
背景
我正在定义table inheritance。计划使用 Table API 包和视图来处理必要的逻辑和表示。
我还需要定义多个具有不同属性的多级命名层次结构。
然而,将表继承(位置 > 州、市)和命名层次结构(州
问题
我想定义一个唯一键强制城市名称在州内是唯一的,但名称字段的抽象阻止了这种情况。如果需要,我可以在 PL/SQL 中处理它,但如果可能的话,我想在 SQL 级别(最好没有额外的表)强制执行它。
约束
其他表需要能够通用地引用层次结构的任何级别(位置)。
其他表也需要能够引用层次结构的特定级别。
想法
由于关系图的复杂性,我无法做到single table inheritance。
为了方便起见,我考虑过复制名称字段,但我宁愿不违反范式。
示例
CREATE TABLE location
( id NUMBER ( 38) PRIMARY KEY
, name VARCHAR2(1000) NOT NULL
, type_id NUMBER ( 38) NOT NULL
--, other common/super attributes
);
CREATE TABLE state
( id NUMBER(38) PRIMARY KEY
REFERENCES location (id)
--, child attributes
);
CREATE TABLE city
( id NUMBER(38) PRIMARY KEY
REFERENCES location (id)
, state_id NUMBER(38) NOT NULL
REFERENCES state (id)
--, child attributes
);
【问题讨论】:
-
威斯康星州有 6 个斯普林菲尔德。 Texarkana 位于德克萨斯州和阿肯色州
-
States/Cities 不是我的实际问题域;我只是用它作为例子,所以重复城市名称的现实不是问题。
标签: oracle inheritance database-design hierarchy