2017-04-27 17 views
-1

Oracleデータベースの初心者です。リレーショナル・スキームに基づいてOracle Databaseを作成する方法

私はリレーショナル・ダイアグラムを持っており、Oracleで表を作成したいのですが、それらとそれぞれの主キーとの関係をどうやって作成するのか分かりません。私の先生は、テーブル "患者"と "医師"は "人"テーブルからすべての属性を継承しなければならないと言います。

また、「処方箋」テーブルは、「患者」および「医師」テーブルの属性を継承する必要があります。それでは "処方箋"テーブルを使いましょう。

これは、あなたがこのページで見つけることができますあなたが必要な図

diagram

+0

これまでに何を試みましたか?私たちはあなたの宿題をしません。 – NaeiKinDus

+0

SOは「ハウツー」サイトやチュートリアルサイトではありません。チュートリアルまたは[oracle documentation](http://docs.oracle.com/database/122/SQLRF/CREATE-TABLE.htm#SQLRF01402)から始めて、何か試してみて、コードに問題がある場合はここに投稿して助けを求めてください。 – Aleksej

+0

オブジェクト・ブラウザでOracle 11gでテーブルを作成しようとしましたが、親と子(「パーソン」や「患者」や「医師」などの子どものような人物)の関係をどうやって作るのか分かりません。 –

答えて

0

すべてです:セクションの「表作成のパラレルの」属性の簡単なテーブルと継承を作成するofficial oracle docs

Basicの構文。

0
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 
); 
0

わからないあなただけのpeoplepatientsテーブル

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) 
); 

先生をマージすることができるように医師は生年月日や性別を持たないと、なぜが言うのテーブル「の患者"医師"は "Persons"テーブルからすべての属性を継承する必要があります。これによって、彼らはdoctors表がpeopleテーブルのすべての列を有していなければならないことを意味する場合

が、これは正規化のアイデアを破ります。これを行う必要がある場合は、データを複製するのではなくVIEWとして実装する必要があります。

CREATE VIEW doctor_details IS 
    SELECT p.*, d.sepcialization 
    FROM people p 
     INNER JOIN 
     doctors d 
     ON (p.id = d.id); 
+0

私の先生は、第2通信であなたが言ったことをしたいと思います。 「医師」テーブルは、「人」テーブルのすべての列と「患者」の同じ列を持たなければならないということです。これまで私が理解できなかったことです。どうもありがとうございました! –

+0

「医者が生年月日や性別を持たない理由はわかりません」というのは、DOCTORエンティティに関連する属性ではない(HRアプリケーションを構築している場合を除きますが)、治療との関連性が高く、患者へ – APC