问题描述
基于对象关系数据库模型,我想创建从类型or_doctor
派生的表or_recepcionist
和t_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
如果您使用的是对象派生的表,那么您似乎被对象的标识符所困;因此,使对象名称通用,以便它们在将要使用的每个位置都适用。