首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >唯一的键(不是主键)可以是其他表的外键吗?

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

Stack Overflow用户
提问于 2015-02-15 15:22:40
回答 3查看 9.6K关注 0票数 9

我有两个表学生和学生--学生的用户名是表中唯一的键,它被引用为‘学生概况’表的外键。

表的DDL为

代码语言:javascript
复制
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)
);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-15 15:40:50

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

代码语言:javascript
复制
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演示

票数 7
EN

Stack Overflow用户

发布于 2015-02-15 15:42:43

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

您可以有一个主键和一个唯一的键,并且您希望验证这两个键。

票数 2
EN

Stack Overflow用户

发布于 2015-02-15 17:59:38

是的,您可以引用受主键约束或唯一约束控制的列(或列)。

您的表"studentsprofilepic“的问题是您的外键试图使用列”studentsprofilepic“,”username“,但该列不存在。

代码语言:javascript
复制
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)
);

还有,问问自己“学生简介史诗”有什么意义。“id”?这不是主钥匙。这不是外键。除了让你说:“嘿,我的桌子上有一个名为‘id’的栏目,这似乎没有任何用处!”这是个值得怀疑的特征。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28527630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档