参照表外键怎么自动查找到被参照表主键值?

数据库生成主键值,参照表外键怎么自动查找到被参照表主键值?


CREATE TABLE t_group (
        groupid INT NOT NULL,
        groupname VARCHAR(30),
        PRIMARY KEY (groupid)
);


CREATE TABLE t_user (
        userid INT NOT NULL,
        username VARCHAR(30),
        PRIMARY KEY (userid),


);


CREATE TABLE t_link (
        linkid INT NOT NULL,
        groupid INT,
        userid INT,
        PRIMARY KEY (linkid),
        FOREIGN KEY (groupid) REFERENCES t_group(groupid),
        FOREIGN KEY (userid) REFERENCES t_user(userid)
);


用SEQUENCE让数据库自动生成各表主键值。
CREATE SEQUENCE seq_group AS INT
  START WITH 1
  INCREMENT BY 1
  NO MAXVALUE
  NO CYCLE
  CACHE 100;


CREATE SEQUENCE seq_user AS INT
  START WITH 1
  INCREMENT BY 1
  NO MAXVALUE
  NO CYCLE
  CACHE 100;


CREATE SEQUENCE seq_link AS INT
  START WITH 1
  INCREMENT BY 1
  NO MAXVALUE
  NO CYCLE
  CACHE 100;


各表现在有这些数据待插入:
t_group:
Group1
Group2


t_user:
xiaoming
xiaohua


t_link:
Group1,xiaoming
Group2,xiaohua






对于表记录做更新操作:
INSERT INTO t_group VALUES (seq_group.nextval, 'Group1');
INSERT INTO t_group VALUES (seq_group.nextval, 'Group2');
INSERT INTO t_user VALUES (seq_user.nextval, 'xiaoming');
INSERT INTO t_user VALUES (seq_user.nextval, 'hua');


用$groupid和$userid分别表示groupid和userid的值。
INSERT INTO t_link VALUES (seq_link.nextval,$groupid,$userid);


请问怎么样让数据库能在往t_link表插数时自动查找到相应的groupid和userid的值?谢谢!
参与7

6同行回答

wangyaxwangyax软件开发工程师金融机构
在shell里面应该很好实现的吧?你将seq_group.nextval得到的值user_id和group_id传给一个变量,insert的时候直接引用变量,这样不就一致了吗?显示全部
在shell里面应该很好实现的吧?
你将seq_group.nextval得到的值user_id和group_id传给一个变量,insert的时候直接引用变量,这样不就一致了吗?收起
互联网服务 · 2014-10-28
浏览1068
NullPlaceNullPlace其它IBM
回复 2# wangyax 也许是我没说清楚,user xiaoming不会既可以在group1里面,也可以在group2里面。已经给定 (Group1,xiaoming) 是 t_link 表的输入数据,只是插到t_link表不能直接插group1,需要插group1对应的$groupid。同样插到t_link表不能直接插xiaoming,需要插xiaoming对应的...显示全部
回复 2# wangyax


也许是我没说清楚,user xiaoming不会既可以在group1里面,也可以在group2里面。已经给定 (Group1,xiaoming) 是 t_link 表的输入数据,只是插到t_link表不能直接插group1,需要插group1对应的$groupid。同样插到t_link表不能直接插xiaoming,需要插xiaoming对应的$userid。收起
互联网服务 · 2014-10-28
浏览1091
NullPlaceNullPlace其它IBM
回复 4# ilovebaishikele 那请问常见的 Fact Table 和 Dimension Table 方式,会在 Fact Table 相应的 Dimension 字段生成 Dimension number,与 Dimension Table 的ID 关联。这种方式Dimension number 不是自动生成的吗?显示全部
回复 4# ilovebaishikele


那请问常见的 Fact Table 和 Dimension Table 方式,会在 Fact Table 相应的 Dimension 字段生成 Dimension number,与 Dimension Table 的ID 关联。这种方式
Dimension number 不是自动生成的吗?收起
互联网服务 · 2014-10-28
浏览1068
ilovebaishikeleilovebaishikele数据库管理员北京首都公路发展集团
感觉你这个场景描述的就有问题,照你这样的应该实现不了吧,欢迎大神解答显示全部
感觉你这个场景描述的就有问题,照你这样的应该实现不了吧,欢迎大神解答收起
互联网服务 · 2014-10-27
浏览1141
NullPlaceNullPlace其它IBM
就是想在数据库里维护一个user和和group的关系表呀。xiaoming在输入数据里已经给定是在group1,但是插到t_link表不能直接插group1,需要插group1对应的$groupid。同样插到t_link表不能直接插xiaoming,需要插xiaoming对应的$userid。...显示全部
就是想在数据库里维护一个user和和group的关系表呀。
xiaoming在输入数据里已经给定是在group1,但是插到t_link表不能直接插group1,需要插group1对应的$groupid。同样插到t_link表不能直接插xiaoming,需要插xiaoming对应的$userid。收起
互联网服务 · 2014-10-25
浏览1102
wangyaxwangyax软件开发工程师金融机构
能更详细说明你的应用场景吗?t_link虽然是user和group的对照关系表,但是很显然必须你自己控制,程序是没法给你填写的。比如user xiaoming,可以在group1里面,也可以在group2里面。显示全部
能更详细说明你的应用场景吗?

t_link虽然是user和group的对照关系表,但是很显然必须你自己控制,程序是没法给你填写的。
比如user xiaoming,可以在group1里面,也可以在group2里面。收起
互联网服务 · 2014-10-24
浏览1098

提问者

NullPlace
其它IBM

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2014-10-22
  • 关注会员:1 人
  • 问题浏览:6253
  • 最近回答:2014-10-28
  • X社区推广