唯一键(不是主键)可以是其他表的外键吗?

时间:2015-02-15 15:22:41

标签: oracle foreign-keys primary-key unique-key

我有两名学生和学生 学生的'用户名'是表格的唯一键 它被引用为'studentsprofilepic'表的外键

表的DDL是

CREATE TABLE students (
  id             NUMBER,
  username       VARCHAR2(30),
  password       VARCHAR2(30),
  firstname      VARCHAR2(30),
  lastname       VARCHAR2(40),
  email          VARCHAR2(300),
  dob            VARCHAR2(20),
  alt_email      VARCHAR2(300),
  street_address VARCHAR2(50),
  address_2      VARCHAR2(50),
  city           VARCHAR2(30),
  state          VARCHAR2(30),
  zip            VARCHAR2(10),
  country        VARCHAR2(60),
  telephone      VARCHAR2(10),
  CONSTRAINT student_id_pk PRIMARY KEY (id),
  CONSTRAINT student_username_uk UNIQUE (username)
);

CREATE TABLE studentsprofilepic (
  id       NUMBER,
  photo_id NUMBER,
  photo    BLOB,

  PRIMARY KEY (photo_id),
  FOREIGN KEY (username) REFERENCES students (username)
);

3 个答案:

答案 0 :(得分:1)

,外键列通常在另一个表中与primary key unique key列(引用键)建立直接关系:

CREATE TABLE BOOK(
    BNAME VARCHAR2(10)NOT NULL UNIQUE,
    BTYPE VARCHAR2(10));
CREATE TABLE BOOKS_AUTH(
    A_ID INT NOT NULL,
    BNAME_REF VARCHAR2(10) NOT NULL,
    FOREIGN KEY (BNAME_REF) REFERENCES BOOK (BNAME));

SQLFIDDLE DEMO

答案 1 :(得分:1)

是的,为什么不呢。可以在UNIQUE constraint中引用FOREIGN KEY

您可以拥有主键和唯一键,并且您希望同时验证它们。

答案 2 :(得分:1)

是的,您可以引用由主键约束或唯一约束支配的列(或列)。

你的桌子的问题" studentsprofilepic"是你的外键试图使用列" studentsprofilepic"。"用户名",但该列不存在。

create table studentsprofilepic(
  id number,
  photo_id number,
  photo blob,
  -- Add the "username" column.
  username varchar2(30) not null,
  primary key (photo_id),
  foreign key (username) references students (username)
);

另外,问问自己"" studentsprofilepic"。" id"?"它不是主键。它不是外键。除了让你说出来之外,它似乎没有提供任何目的,嘿,我的表格中有一个名为“id'!"”的列。这是一个值得怀疑的功能。

考虑添加更多not null个约束。