如何使用oracle数据库创建table

How to create table using oracle database

晚上好,我是 Oracle 数据库的初学者,我想创建如下 3 个表,如果您能向我解释一下。

我的数据库架构:

根据您的 ERD,您希望创建三个带有外键的表。下面是创建它们的脚本。

CREATE TABLE countries (
  country_id NUMBER PRIMARY KEY,
  name_country VARCHAR2(30)
);

CREATE TABLE cities (
  city_id NUMBER PRIMARY KEY,
  name_city VARCHAR2(30),
  country_id NUMBER,
  CONSTRAINT country_fk FOREIGN KEY (country_id)
    REFERENCES countries (country_id)
);

CREATE TABLE capital_cities (
  capital_city_id NUMBER PRIMARY KEY,
  area VARCHAR2(30),
  city_id NUMBER,
  CONSTRAINT city_fk FOREIGN KEY (city_id)
    REFERENCES cities (city_id)
);

几点说明:

  1. 最好将表命名为复数,将列命名为单数。这有助于提高可读性并创建句法内聚。

  2. 表应该有一个独立的主键。这有助于维护数据完整性,并使创建外键更加容易。

  3. 我在定义您的列数据类型时做出了假设。您可以更改它们以适合您的数据。最常见的 Oracle 数据类型是 NUMBER、VARCHAR2 和 DATE。

  4. 我对你的表之间的关系做了一些假设。我不会称之为良好的规范化,但您可以通过研究该主题来了解有关数据库规范化的更多信息(它太广泛,无法在此处涵盖)。

使用对象 Table:

CREATE TYPE country IS OBJECT (
  country_name VARCHAR2(100)
) NOT FINAL;

CREATE TYPE city UNDER country (
  city_name VARCHAR2(100)
) NOT FINAL;

CREATE TYPE capitol UNDER city (
  area VARCHAR2(100)
);

CREATE TABLE countries OF country;
CREATE TABLE cities OF city;
CREATE TABLE capitols OF capitol;

然后你可以这样插入:

INSERT INTO capitols ( country_name, city_name, area )
VALUES ( 'Country', 'City', 'Area' );

并且 capitols table 继承了其祖先类型的列。

db<>fiddle