Oracle Data Modeler - ограничение уже существует - PullRequest
0 голосов
/ 04 декабря 2018

Я новичок в Oracle Data Modeler и пытаюсь создать диаграмму ER для гипотетической компании, в которой может быть много торговых точек (Outlet), много отделов (Department) и много сотрудников (Staff).

Я выбрал отношение 1:N Идентификация отношения, чтобы создать составной ключ как для отдела, так и для персонала.Я решил сделать это, потому что каждый идентификатор отдела связан с идентификатором торговой точки, а сотрудники связаны с торговой точкой.

Возможно, это неправильные отношения, потому что, когда я проектирую диаграмму, а затем извлекаю код из редактора файлов DDL и запускаю его, я получаю несколько таких ошибок:

ALTER TABLE stock
    ADD CONSTRAINT stock_products_fk 
        FOREIGN KEY ( products_product_id )
        REFERENCES products ( product_id )

Ошибкаотчет

ORA-02275: such a referential constraint already exists in the table

02275.00000 - «такое ссылочное ограничение уже существует в таблице» * Причина: Самоочевидно.* Действие: удалите дополнительное ограничение.

Действие довольно простое - я должен удалить дополнительное ограничение, но это заставляет меня задаться вопросом, почему оно существует, и указывает ли это, что мой метод неверен?

Код для создания таблиц приведен ниже вместе с моей диаграммой ER.Я думаю, что отношения между таблицами вызывают проблему.Любая помощь очень ценится.Спасибо

CREATE TABLE department (
    department_id           VARCHAR2(20) NOT NULL,
    outlet_outlet_id        VARCHAR2(20) NOT NULL,
    department_name         VARCHAR2(30),
    department_floor_area   INTEGER
);

ALTER TABLE department ADD CONSTRAINT department_pk PRIMARY KEY ( outlet_outlet_id,
                                                                  department_id );

CREATE TABLE outlet (
    outlet_id           VARCHAR2(20) NOT NULL,
    outlet_address      VARCHAR2(40),
    outlet_phone_no     INTEGER,
    outlet_size         INTEGER,
    outlet_floor_size   INTEGER
);

ALTER TABLE outlet ADD CONSTRAINT outlet_pk PRIMARY KEY ( outlet_id );

CREATE TABLE products (
    product_id                    VARCHAR2(20) NOT NULL,
    product_description           VARCHAR2(30),
    currently_supplied            BLOB,
    sales_category_sales_cat_id   VARCHAR2(20) NOT NULL,
    supplier_supplier_id          VARCHAR2(20) NOT NULL
);

ALTER TABLE products ADD CONSTRAINT products_pk PRIMARY KEY ( product_id );

CREATE TABLE sales_category (
    sales_cat_id                 VARCHAR2(20) NOT NULL,
    sales_category_description   VARCHAR2(30)
);

ALTER TABLE sales_category ADD CONSTRAINT sales_category_pk PRIMARY KEY ( sales_cat_id );

CREATE TABLE staff (
    staff_id            VARCHAR2(20) NOT NULL,
    outlet_outlet_id    VARCHAR2(20) NOT NULL,
    staff_name          VARCHAR2(30),
    staff_phone_no      INTEGER,
    staff_mgmt_status   BLOB
);

ALTER TABLE staff ADD CONSTRAINT staff_pk PRIMARY KEY ( outlet_outlet_id,
                                                        staff_id );

CREATE TABLE stock (
    products_product_id   VARCHAR2(20) NOT NULL,
    stock_id              VARCHAR2(20) NOT NULL,
    number_of_products    INTEGER,
    outlet_outlet_id      VARCHAR2(20) NOT NULL
);

ALTER TABLE stock ADD CONSTRAINT stock_pk PRIMARY KEY ( products_product_id,
                                                        stock_id );

CREATE TABLE supplier (
    supplier_id        VARCHAR2(20) NOT NULL,
    supplier_name      VARCHAR2(40),
    supplier_address   VARCHAR2(40)
);

ALTER TABLE supplier ADD CONSTRAINT supplier_pk PRIMARY KEY ( supplier_id );

ALTER TABLE department
    ADD CONSTRAINT department_outlet_fk FOREIGN KEY ( outlet_outlet_id )
        REFERENCES outlet ( outlet_id );

ALTER TABLE products
    ADD CONSTRAINT products_sales_category_fk FOREIGN KEY ( sales_category_sales_cat_id )
        REFERENCES sales_category ( sales_cat_id );

ALTER TABLE products
    ADD CONSTRAINT products_supplier_fk FOREIGN KEY ( supplier_supplier_id )
        REFERENCES supplier ( supplier_id );

ALTER TABLE staff
    ADD CONSTRAINT staff_outlet_fk FOREIGN KEY ( outlet_outlet_id )
        REFERENCES outlet ( outlet_id );

ALTER TABLE stock
    ADD CONSTRAINT stock_outlet_fk FOREIGN KEY ( outlet_outlet_id )
        REFERENCES outlet ( outlet_id );

ALTER TABLE stock
    ADD CONSTRAINT stock_products_fk FOREIGN KEY ( products_product_id )
        REFERENCES products ( product_id );

ALTER TABLE department
    ADD CONSTRAINT department_outlet_fk FOREIGN KEY ( outlet_outlet_id )
        REFERENCES outlet ( outlet_id );

ALTER TABLE products
    ADD CONSTRAINT products_sales_category_fk FOREIGN KEY ( sales_category_sales_cat_id )
        REFERENCES sales_category ( sales_cat_id );

ALTER TABLE products
    ADD CONSTRAINT products_supplier_fk FOREIGN KEY ( supplier_supplier_id )
        REFERENCES supplier ( supplier_id );

ALTER TABLE staff
    ADD CONSTRAINT staff_outlet_fk FOREIGN KEY ( outlet_outlet_id )
        REFERENCES outlet ( outlet_id );

ALTER TABLE stock
    ADD CONSTRAINT stock_outlet_fk FOREIGN KEY ( outlet_outlet_id )
        REFERENCES outlet ( outlet_id );

ALTER TABLE stock
    ADD CONSTRAINT stock_products_fk FOREIGN KEY ( products_product_id )
        REFERENCES products ( product_id );

ER Diagram

1 Ответ

0 голосов
/ 04 декабря 2018

Я подозреваю, что есть проблема с тем, как вы извлекаете DDL из модели - вы получаете это утверждение дважды:

ALTER TABLE stock
    ADD CONSTRAINT stock_outlet_fk FOREIGN KEY ( outlet_outlet_id )
        REFERENCES outlet ( outlet_id );

...

ALTER TABLE stock
    ADD CONSTRAINT stock_outlet_fk FOREIGN KEY ( outlet_outlet_id )
        REFERENCES outlet ( outlet_id );

Я ожидаю, что эта ошибка завершится с этой ошибкой, когда она получитна 2-й экземпляр акта.

...