0

判断する前に、私が質問をする理由がわからないことを覚えておいてください。過去に発生した反対票に落胆しています。

Oracle 10g でデータベースを作成する必要があり、テンプレートを使用して新しいテーブルを作成しています。データベースは架空の Facebook アプリケーションに関するものです。

とりわけ、3 つの属性を持つ "like" 関係が含まれており、そのすべてがキーであると想定されています。

like:

username: key
message_author: key
message_code: key

私が言ったように、ユーザーとメッセージの 2 つのエンティティ間の関係です。

他のテーブルに接続された 3 つの外部キーのようにテーブルをセットアップしようとしましたが、オラクルはそれを受け入れません。

次のエラー メッセージが表示されます。

FK like_FK2 の作成に失敗しました ORA-02270: この列リストに一致する一意キーまたは主キーがありません

ORA-00942: 表またはビューが存在しません

ORA-06510: PL/SQL: 未処理のユーザー定義例外です

キーに何か問題があると思いますが、それが何であるか理解できません

SQL コマンド:

CREATE table "ΑΡΕΣΕΙ" (
    "ΟΝΟΜΑΧΡΗΣΤΗ"    VARCHAR2(30) NOT NULL,
    "ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ" VARCHAR2(30) NOT NULL,
    "ΚΩΔΜΗΝΥΜΑΤΟΣ"   NUMBER NOT NULL
)
/

ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK" 
    FOREIGN KEY ("ΟΝΟΜΑΧΡΗΣΤΗ")
    REFERENCES "ΧΡΗΣΤΗΣ" ("ΟΝΟΜΑΧΡΗΣΤΗ")

/
ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK2" 
    FOREIGN KEY ("ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ")
    REFERENCES "ΜΗΝΥΜΑ" ("ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ")

/
ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK3" 
    FOREIGN KEY ("ΚΩΔΜΗΝΥΜΑΤΟΣ")
    REFERENCES "ΜΗΝΥΜΑ" ("ΚΩΔΜΗΝΥΜΑΤΟΣ")

/
alter table "ΑΡΕΣΕΙ" add
    constraint ΑΡΕΣΕΙ_UK1
    unique ("ΚΩΔΜΗΝΥΜΑΤΟΣ")
/   
4

1 に答える 1

0

リレーションシップ制約および などのその他の制約を指定するUNIQUE前に、これらのステートメントをコーディングして実行する前に、テーブルが存在することを確認してください。私の答えであなたのコードを少し編集しています:

CREATE table "ΑΡΕΣΕΙ" (
    "ΟΝΟΜΑΧΡΗΣΤΗ"    VARCHAR2(30) NOT NULL,
    "ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ" VARCHAR2(30) NOT NULL,
    "ΚΩΔΜΗΝΥΜΑΤΟΣ"   NUMBER(10,2) NOT NULL -- PRECISION AND SCALE MUST BE MENTIONED FOR NUMBER DATA TYPE
)
/

CREATE table "ΜΗΝΥΜΑ" (
     "ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ"  VARCHAR2(30) -- data types are recommended to be the same
     "ΚΩΔΜΗΝΥΜΑΤΟΣ"    NUMBER(10,2)
     -- Other columns go here
)
/

CREATE TABLE "ΧΡΗΣΤΗΣ" (
     "ΟΝΟΜΑΧΡΗΣΤΗ"     VARCHAR(30)
     -- Other columns go here
)
/

-- After you create all the tables, you can code the alter table statements
-- that would add all your necessary constraints.

ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK" 
    FOREIGN KEY ("ΟΝΟΜΑΧΡΗΣΤΗ")
    REFERENCES "ΧΡΗΣΤΗΣ" ("ΟΝΟΜΑΧΡΗΣΤΗ")
/

ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK2" 
    FOREIGN KEY ("ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ")
    REFERENCES "ΜΗΝΥΜΑ" ("ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ")
/

ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK3" 
    FOREIGN KEY ("ΚΩΔΜΗΝΥΜΑΤΟΣ")
    REFERENCES "ΜΗΝΥΜΑ" ("ΚΩΔΜΗΝΥΜΑΤΟΣ")
/

alter table "ΑΡΕΣΕΙ" add
    constraint ΑΡΕΣΕΙ_UK1
    unique ("ΚΩΔΜΗΝΥΜΑΤΟΣ")
/   

PRIMARY KEYまた、一意の制約と null 以外の制約を列に同時に設定できるという制約があることに注意してください。参照用に、docs.oracle.com でオラクルが提供するドキュメントを読むことをお勧めします。

また、すべてのテーブル名と列名を ASCII (az、AZ、0-9) 文字で言及していただければ幸いです。オブジェクト識別子としての Unicode 文字はサポートされている可能性がありますが、保守が困難です。

于 2013-03-14T03:42:28.140 に答える