Sql oracle数据库查询的含义是什么:主键引用t_名称(col_名称)?
我有3个表,前两个表很简单,但第三个表的含义是什么,因为我知道外键引用Sql oracle数据库查询的含义是什么:主键引用t_名称(col_名称)?,sql,database,oracle,Sql,Database,Oracle,我有3个表,前两个表很简单,但第三个表的含义是什么,因为我知道外键引用t\u name(col\u name)
t\u name(col\u name)但是主键引用t_name(col_name)和col_name引用t_name(col_name)的含义是什么 这不是特例。此处,表issues
的主键bid
引用表books
的列bid
。这仅仅意味着发行的bid
将只包含书籍的bid
中存在的那些值。它将充当表问题
的主键,因此它将具有唯一的值,并且其值将限于书籍
表中包含的值
因此,它只是意味着它是主键值,其值在表books
中,它与任何其他参考
语句相同。这意味着主键还引用了Books(bid)
我可以想出两个理由来解释为什么会使用这种结构。首先,“问题”实体可以是“账簿”实体的子集。这将允许在问题
中存储额外的问题特定列,而不会使书籍
杂乱无章。它还允许外键访问问题
或书籍
第二个原因是,这是实现垂直分区的一种方法。当一个表有很多列时,就会发生这种情况。出于性能原因,您希望将它们划分到不同的存储区域。这有点类似于列式数据库的功能,但它有额外主键的开销。这与PL/SQL或mysql有什么关系?查看这个@GoodbandShugh:mysql手册对Oracle问题没有真正的帮助(而且mysql会忽略上述外键约束)@在编辑问题之前,一个带有\u no\u名称的\u horse\u也用mysql进行了标记。我知道第一个和第二个没有主键引用表成员的中间部分意味着不需要具有唯一值,并且可以从问题表中的成员表复制值。是否正确?感谢您的帮助。
create table books
(
bid number(5) primary key,
name varchar2(30)
);
create table members
(
mid number(5) primary key,
name varchar2(30)
);
create table issues
(
bid number(5) primary key
references books(bid),
mid number(5)
references members (mid)
);