如何基于关系模式创建Oracle数据库
我是Oracle数据库的初学者。如何基于关系模式创建Oracle数据库
我有一个关系图,我想在Oracle中创建表,但我不知道如何在它们和主键之间建立关系。我的老师说,“病人”和“医生”这些表格必须继承“人员”表中的所有属性。
此外,“处方”表需要继承“患者”和“医生”表中的属性。所以与“处方”表。
这是图
CREATE TABLE empleat(
emp_no number(6,0) CONSTRAINT fk_empleat PRIMARY KEY,
nom varchar(20) CONSTRAINT nn_empleat_nom NOT NULL,
cognom varchar(20),
departament number(2,0) CONSTRAINT nn_empleat_dept NOT NULL
);
CREATE TABLE departament(
dept_no number(2,0) CONSTRAINT fk_departament_dept_no PRIMARY KEY,
nom varchar(20) CONSTRAINT nn_departament_nom NOT NULL,
localitat varchar2(30),
lider number(6,0) CONSTRAINT nn_departament NOT NULL
);
不知道为什么医生就不会出生日期或性别,所以你可以只合并people
和patients
表
CREATE TABLE people (
id NUMBER CONSTRAINT people__id__pk PRIMARY KEY,
first_name VARCHAR2(250) CONSTRAINT people__first_name__nn NOT NULL,
last_name VARCHAR2(250) CONSTRAINT people__last_name__nn NOT NULL,
phone VARCHAR2(20),
date_of_birth DATE CONSTRAINT people__date_of_birth__nn NOT NULL,
gender CHAR(1) CONSTRAINT people__gender__chk CHECK (gender IN ('M', 'F', 'X', 'Y')),
doctor NUMBER CONSTRAINT people__doctor__fk REFERENCES doctor (id)
);
CREATE TABLE doctor (
id NUMBER CONSTRAINT doctor__id__pk PRIMARY KEY
CONSTRAINT doctor__id__fk REFERENCES people (id),
specialization VARCHAR2(250)
);
我的老师说,表“患者“和”医生“必须继承”人员“表中的所有属性。
如果这一点,他们意味着doctors
表必须具有people
表的所有列,然后这打破正常化的想法。如果您需要这样做,那么它应该作为VIEW
实施,而不是复制数据。
CREATE VIEW doctor_details IS
SELECT p.*, d.sepcialization
FROM people p
INNER JOIN
doctors d
ON (p.id = d.id);
我的老师想要做你在第二次通信中说的话。 '医生'餐桌必须包含'人'餐桌上的所有列,并且'病人'上有同样的事情。这是我直到现在才明白的。非常感谢你! –
“不确定医生为什么没有出生日期或性别”,因为这些属性与DOCTOR实体无关(除非我们正在编写人力资源申请),但他们确实与医学治疗极其相关,因此属于正确的给患者实体 – APC
你到目前为止尝试过什么?我们不会为你做你的功课。 – NaeiKinDus
SO不是一个“如何做”或教程网站。从某些教程或[oracle文档](http://docs.oracle.com/database/122/SQLRF/CREATE-TABLE.htm#SQLRF01402)开始,尝试一些内容,然后如果您的代码存在问题,随时张贴在这里,并寻求帮助。 – Aleksej
我试图用Oracle对象浏览器在Oracle 11g中创建表,我不知道如何使父母和孩子之间的关系(像“孩子”,像partents和“医生”,像孩子)。 –