0

私の学校のプロジェクトでは、データベースを作成する必要がありました。これは私の ERD です。

ERD

SQL で、Category テーブルを作成します。

CREATE table "Category" (
  "Id" NUMBER(5) NOT NULL,
  "SubCategoryId" NUMBER(5) NULL,
  "Name" VARCHAR2(32) NOT NULL,
  CONSTRAINT "Category_pk" PRIMARY KEY ("Id")
);

ALTER TABLE "Category" ADD CONSTRAINT "Category_fk" FOREIGN KEY ("SubCategoryId") REFERENCES "Category" ("Id");

製品表

CREATE table "Product" (
  "Id" NUMBER(5) NOT NULL,
  "CategoryId" NUMBER(5) NOT NULL, /* Category.Id or Category.SubCategoryId */
  "Name" VARCHAR2(32) NOT NULL,
  "Brand" VARCHAR2(32),
  "Type" VARCHAR2(32),
  "Year" NUMBER(4),
  CONSTRAINT "Product_pk" PRIMARY KEY ("Id")
);

製品テーブルには、Category.Id に CategoryId (外部キー) がありますが、Product.CategoryId には、Category.SubCategoryId にも外部キーが必要です。

これは可能ですか、それとも「SubCategory」という追加のテーブルを作成してから、Category.Id と SubCategory.Id に外部キーを追加する必要がありますか?

4

1 に答える 1

1

外部キー参照は、他のテーブルではなく、カテゴリテーブルに属します。これはER図から明らかです。適切なリンクを丸で囲みました。

定義を次のように書きます。

CREATE table Category (
  CategoryId NUMBER(5) NOT NULL,
  SubCategoryId NUMBER(5) NULL,
  Name VARCHAR2(32) NOT NULL,
  CONSTRAINT Category_pk PRIMARY KEY (CategoryId),
  CONSTRAINT fk_Category_SubCategory FOREIGN KEY (SubCategoryId) REFERENCES Category(CategoryId)
);

ノート:

  • テーブル名と列名に二重引用符を使用しないでください。コードの記述と読み取りが難しくなるだけです。必然的に、そのような名前には予約語、スペース、またはその他の不適切な文字を使用しないでください。
  • テーブル名を含むように、テーブルの主キーに名前を付けます。そうすれば、ほとんどの外部キー列は主キー列とまったく同じ名前になります。
  • 列定義行でprimary keyandを使用するだけでなく、すべての制約に名前を付けたことを称賛します。references
于 2015-10-03T11:54:16.033 に答える