2016-12-08 14 views
0

私はこの問題をしばらく解決していますが、私は職場に割り当てられなければならない異なる職員の役割を持っています。答えを見つける、どんな助けも高く評価されるでしょう。以下のサンプルコードとERD何のイムは4 PKがOracleの1列にFKを入れている

CREATE TABLE office (         --7 
    office_id  Number(4)NOT NULL PRIMARY KEY, 
    address  address, 



CREATE TABLE office_staff (        --8 
     staff_id  Number(4)NOT NULL PRIMARY KEY, 
     office_id   Number(4), 
     manager    char(1), 
     CONSTRAINT manager_boolean CHECK (manager IN ('1','0'))); 

CREATE TABLE staff_role (
     staff_role_id NUMBER(4) PRIMARY KEY, 
     staff_id  tinyint references office_staff(staff_id), 
     unique(staff_role_id, staff_id), 
     role_name  varchar2(20)); 

CREATE TABLE manager (         --1 
     manager_id  Number(4)NOT NULL PRIMARY KEY, 
     staff_role_id as cast(1 as tinyint) persisted, 
    foreign key (manager_id, staff_id) references staff_role(staff_role_id, staff_id) 
     manager_firstname varchar2(20), 
     manager_lastname varchar2(20), 
     gender   varchar2(1), 
     date_of_birth  date, 
     telephone   varchar2(11)); 

CREATE TABLE senior_instructor (      --2 
     senior_instructor_id Number(4)NOT NULL, 
     staff_role_id as cast(2 as tinyint) persisted, 
    foreign key (senior_instructor_id, staff_id) references staff_role(staff_role_id, staff_id) 
     s_instructor_firstname varchar2(20), 
     s_instructor_lastname varchar2(20), 
     gender     varchar2(1), 
     date_of_birth   date, 
     telephone    varchar2(11)); 

CREATE TABLE office_admin (        --3 
     admin_id  Number(4)NOT NULL, 
     staff_role_id as cast(3 as tinyint) persisted, 
    foreign key (admin_id, staff_id) references staff_role(staff_role_id, staff_id) 
     admin_firstname varchar2(20), 
     admin_lastname varchar2(20), 
     gender   varchar2(1), 
     date_of_birth date, 
     telephone  varchar2(11)); 

CREATE TABLE instructor (        --6 
     instructor_id  Number(4)NOT NULL, 
     staff_role_id as cast(4 as tinyint) persisted, 
    foreign key (instructor_id, staff_id) references staff_role(staff_role_id, staff_id) 
     instructor_firstname varchar2(20), 
     instructor_lastname varchar2(20), 
     gender    varchar2(1), 
     date_of_birth  date, 
     telephone   varchar2(11), 
     car_id    Number(4)); 

電流出力は、私はいくつかの構文エラーを修正し、列名の一部を変更したデータ型が

ERD link here

+0

上記の内容はわかりませんが、正しいOracle SQLではありません。だからあなたはRDBMSを使っていますか? – arturro

+0

私はOracle 10g –

+0

を使用していますので、これは間違いなくOracleの構文です。 Oracleにはtinyintがありません(MS SqlServerにあります)。これは次のとおりです。staff_role_idはキャスト(1はtinyint)、永続化、oracleの正しい構文ではない、unique(staff_role_id、staff_id)も正しくない - Oracleでは、CONSTRAINT constraint_name UNIQUE(uc_col1、uc_col2、... uc_col_n)。あなたは多くを修正する必要があります。 – arturro

答えて

0

をサポートしていない読み込みを達成しようとしています。

このコードは、必要なものを提供しますか?

CREATE TABLE office (         
    office_id  Number(4) NOT NULL PRIMARY KEY, 
    address  VARCHAR2(200)); 

CREATE TABLE office_staff (        
     staff_id  Number(4)NOT NULL PRIMARY KEY, 
     office_id   Number(4), 
     manager    char(1), 
     CONSTRAINT manager_boolean CHECK (manager IN ('1','0'))); 

CREATE TABLE staff_role (
     staff_role_id NUMBER(4) PRIMARY KEY, 
     staff_id  Number(4) references office_staff(staff_id), 
     unique(staff_role_id, staff_id), 
     role_name  varchar2(20)); 

CREATE TABLE manager (         
     manager_id  Number(4)NOT NULL PRIMARY KEY, 
     staff_role_id NUMBER(1), 
    foreign key (staff_role_id, manager_id) references staff_role(staff_role_id, staff_id), 
     manager_firstname varchar2(20), 
     manager_lastname varchar2(20), 
     gender   varchar2(1), 
     date_of_birth  date, 
     telephone   varchar2(11)); 

CREATE TABLE senior_instructor (       
     senior_instructor_id Number(4)NOT NULL, 
     staff_role_id NUMBER(1), 
    foreign key (staff_role_id, senior_instructor_id) references staff_role(staff_role_id, staff_id), 
     s_instructor_firstname varchar2(20), 
     s_instructor_lastname varchar2(20), 
     gender     varchar2(1), 
     date_of_birth   date, 
     telephone    varchar2(11)); 

CREATE TABLE office_admin (        
     admin_id  Number(4)NOT NULL, 
     staff_role_id NUMBER(1), 
    foreign key (staff_role_id, admin_id) references staff_role(staff_role_id, staff_id), 
     admin_firstname varchar2(20), 
     admin_lastname varchar2(20), 
     gender   varchar2(1), 
     date_of_birth date, 
     telephone  varchar2(11)); 

CREATE TABLE instructor (        
     instructor_id  Number(4)NOT NULL, 
     staff_role_id NUMBER(1), 
    foreign key (staff_role_id, instructor_id) references staff_role(staff_role_id, staff_id), 
     instructor_firstname varchar2(20), 
     instructor_lastname varchar2(20), 
     gender    varchar2(1), 
     date_of_birth  date, 
     telephone   varchar2(11), 
     car_id    Number(4)); 

異なるタイプのスタッフに4つのテーブルを使用する理由はありますか?あなたがそれをする必要がないなら、私はそれらを1つのテーブルに組み合わせることをお勧めします(おそらくそれはあなたがoffice_staffでやろうとしていることです)、staff_rolesテーブルとの関係を持っています。

+0

ありがとう、別のスタッフの役割は、他のテーブルとは異なる関係を持っているので、 –

関連する問題