【问题标题】:Create foreign key and use reference over different tablespaces?创建外键并在不同的表空间上使用引用?
【发布时间】:2014-07-31 04:53:10
【问题描述】:

我正在练习数据库创建以及表空间和表实现。我有一个问题,我在互联网上搜索了一些想法,但没有一个与我现在所拥有的完全一致。我的问题是是否可以创建一个使用外键的表,该外键引用不同表空间中的另一个表列。甲骨文 SQL。

create table agent(
code Number(4), 
name varchar(30), 
area Number(4), 
constraint pk_Code primary key (code), 
constraint fk_Area foreign key (area) references Warehouse(code)) 
tablespace sales;

【问题讨论】:

  • 您可以假设 Warehouse 位于名为 Venues 的表空间中。当然,这一切都是虚构的。任何帮助将不胜感激。提前致谢。
  • 运行此语句时遇到什么错误?
  • 你好。这不是错误。我只希望 fk_Area 引用 Warehouse 的代码,但问题是 Warehouse 是在另一个表空间中创建的表。例如,表“代理”在人员表空间中。
  • 您为什么认为这可能是个问题?你为什么不尝试一下——你会发现表空间是无关紧要的?毕竟,“练习”意味着你实际上是在做事。
  • 是的。我首先创建了脚本,并没有想到就这样做。在进行此类更改之前,我更愿意确定。就我一个人。

标签: sql oracle foreign-keys tablespace


【解决方案1】:

在 Oracle 中,tablespaces 是用于管理其存储参数(最重要的是它们映射到数据文件的方式)的表的逻辑容器。

表空间对表的权限或约束没有影响。完全可以将外键添加到引用不同表空间上的表的表中。

【讨论】:

  • 表空间肯定是一个没有逻辑约束的物理数据容器吗?如果它是数据的逻辑容器(如模式),则需要明确授予权限。
  • 表空间是物理空间的逻辑表示。您将一个表分配给一个表空间,然后可以使用该表空间(例如,扩展文件、更改分配策略等),而无需单独管理每个表。
  • 感谢您的确认。感谢您的帮助。
【解决方案2】:

正如@Mureinik 所说,完全可以将外键指向其他表空间中的表。话虽如此,我倾向于不这样做。有一个外键跨越表空间边界是一些(尽管温和)表明表空间设置可以做一些重新考虑。

我个人会将表空间用作管理单元,其中包含共享一些(通常是物理)属性的表(和/或索引),这些属性应设为只读或备份或一起传输...

【讨论】:

  • 我明白了。但是,这里的问题是它是为了回顾课堂上的所有主题。感谢您重申这一点。
猜你喜欢
  • 2014-07-28
  • 2015-05-02
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
相关资源
最近更新 更多