我可以从类型派生的表中更改属性名称吗?

问题描述

基于对象关系数据库模型,我想创建从类型or_doctor派生的表or_recepcionistt_employee。 这里,遵循类型结构:

DROP TYPE t_employee FORCE;
CREATE OR REPLACE TYPE t_employee AS OBJECT (
    num_employee INTEGER,name_employee VARCHAR2(50),birthdate_employee DATE
);

这里是表的结构:

DROP TABLE or_doctor CASCADE CONSTRAINTS;
CREATE TABLE or_doctor OF t_employee (
    PRIMARY KEY (num_employee),name_employee NOT NULL,birthdate_employee NOT NULL
) OBJECT IDENTIFIER IS SYstem GENERATED;

DROP TABLE or_recepcionist CASCADE CONSTRAINTS;
CREATE TABLE or_recepcionist OF t_employee (
    PRIMARY KEY (num_employee),birthdate_employee NOT NULL
) OBJECT IDENTIFIER IS SYstem GENERATED;

这样做,两个表上的属性名称都将以“ employee”结尾。我可以更改属性名称,以使它们在创建表时在每个表中都是特定的吗? 例如:

or_doctor: num_doct,name_doct,birthdate_doct。 表or_recepcionist: num_recep,name_recep,birthdate_recep

解决方法

作为一个框架挑战,不要在标识符中添加后缀,那么您不必担心后缀不正确:

CREATE TYPE t_employee AS OBJECT (
    num       INTEGER,name      VARCHAR2(50),birthdate DATE
);

CREATE TABLE or_doctor OF t_employee (
    PRIMARY KEY (num),name      NOT NULL,birthdate NOT NULL
) OBJECT IDENTIFIER IS SYSTEM GENERATED;

CREATE TABLE or_receptionist OF t_employee (
    PRIMARY KEY (num),birthdate NOT NULL
) OBJECT IDENTIFIER IS SYSTEM GENERATED;

如果您尝试重命名列:

ALTER TABLE or_doctor RENAME COLUMN name TO name_doctor;

然后您将得到错误:

ORA-23291: Only base table columns may be renamed

如果您使用的是对象派生的表,那么您似乎被对象的标识符所困;因此,使对象名称通用,以便它们在将​​要使用的每个位置都适用。