SQL number() 上的外键

SQL foreign key on number()

有一个关于添加外键的新手问题。

使用现有的 ORACLE SQL 数据库,我需要添加一个新的 table。

这是我的脚本:

CREATE TABLE TEST_ASH_CONTACTS (
ASH_ID  number(19,0) FOREIGN KEY REFERENCES ASH_ADMIN_STAKEHOLDER(ASH_ID), 
ASH_CONTACT_ID number(19,0) GENERATED BY DEFAULT ON NULL AS IDENTITY,
ASH_CONTACT_NAME varchar2(80 BYTE),
ASH_CONTACT_TELEFOONNUMMER varchar2(25 BYTE),
ASH_CONTACT_GSMNUMMER varchar2(25 CHAR),
ASH_CONTACT_FAXNUMMER varchar2(25 BYTE),
ASH_CONTACT_EMAILADRES varchar2(100 BYTE),
ASH_CONTACT_WEBSITE varchar2(100 BYTE)     );

现有的table ASH_ADMIN_STAKEHOLDER包含主键ASH_ID number(19) 已在其他现有的table中使用。 当我在 SQLDEVELOPER 工作表中输入语句时,工作表中的关键字 FOREIGN 出现语法错误:“语法错误部分识别规则 ...”

我相信我遵循了 w3schools 网站上的示例:

CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)   );

区别在于 ASH_ID 不是 int 而是 number(19,0)

在图像中,我可以显示利益相关者 table 和同一 ASH_ID 字段上的另一个 table 之间的当前关系。

希望有人能指出我正确的做法 ;-) 欢迎对脚本提出任何其他建议。

看看这是否有帮助:

首先掌握table(必须有一个主键或唯一键,然后将被外键引用):

SQL> create table ash_admin_stakeholder(ash_id number(19) primary key);

Table created.

详细信息 table:有效 语法正确:

SQL> create table test_ash_contacts
  2  (ash_id number(19, 0) constraint fk_con_ash references ash_admin_stakeholder (ash_id));

Table created.

或者,如果你想使用大纲外键约束:

SQL> create table test_ash_contacts
  2  (ash_id number (19, 0),
  3      constraint fk_con_ash foreign key (ash_id)
  4      references ash_admin_stakeholder (ash_id)
  5  );

Table created.

SQL>

关于您对 INTNUMBER(19, 0) 的担忧:也没有问题:

SQL> create table test_ash_contacts
  2  (ash_id int constraint fk_con_ash references ash_admin_stakeholder (ash_id));

Table created.

SQL>

给定一个 parent table 这样的:

create table ash_admin_stakeholder
( ash_id number(19) primary key );

您可以像这样明确命名约束:

create table test_ash_contacts
( ash_id constraint your_constraint_name references ash_admin_stakeholder(ash_id)

否则让 Oracle 生成名称:

create table test_ash_contacts
( ash_id references ash_admin_stakeholder(ash_id)

重复 child table 的数据类型没有任何好处。

顺便说一下,我也会把身份列做成PK,例如

ash_contact_id number(19,0) generated as identity
               constraint test_ash_contacts_pk primary key