【发布时间】:2020-11-01 18:50:20
【问题描述】:
遵循对象关系数据库模型,我想创建从 t_employee 类型派生的表 or_doctor 和 or_recepcionist。
这里,遵循类型结构:
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),
name_employee NOT NULL,
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。
【问题讨论】:
-
为什么要为医生和接待员分开桌子?
-
@June7,因为在巴西,医生有一个名为 CRM 的许可证(可以与美国的 USMLE 相比较),正如我所见,这个属性必须不是 NULL 才能将医生注册到医院数据库,而接收器注册不需要它。
-
就我个人而言,我更愿意为非医生员工保留 Null 字段 - “规范化直到它受伤,非规范化直到它起作用”。只有两种类型的员工?
-
@June7 是的,只有 2 个。这是作业哈哈。但是,我不得不问。我是对象关系数据库的新手。
-
好吧,name 或 name_employee 作为字段名称 - 真的没有区别,因为两个表仍然保存员工信息。因此,按照这种观点,您的结构和代码没有任何问题。除非作业要求创建这 2 个表只是为了演示应用技术,否则没有令人信服的理由来拆分数据。
标签: sql oracle object-oriented-database