日期:2014-05-16  浏览次数:21015 次

请教一个外键的问题
现在有三张表
a 群体用户表
b 个人用户表
c 用户订单表

三张表都有userid一列,a表保存的是群体用户的信息,b表保存的是个人用户的信息

c表是记录两种用户的订购信息,a和b是状态表,记录存进去后根据业务操作进行修改
c表是日志表,每次用户产生订购就登记一条记录

a表和b表的userid不会重复  c表的userid要么取自a表,要么取自b表

现在想为这几张表建外键关系,但是想不出怎么建合适

如果c表为子表,a和b表做父表,分别建立外键指向两个表的userid。

会出现记录插不进去的情况(因为个人用户不在集团里面,集团用户也不在个人里面)

而c表肯定是不能做为父表
------解决方案--------------------
c表分别建立a、b表的外键
c.id1,c.id2这样可以吗?
------解决方案--------------------
你可以再创建一个表,如d表,里面存放a、b表的id值,在c表上创建d表的外键就可以了
------解决方案--------------------
引用:
你可以再创建一个表,如d表,里面存放a、b表的id值,在c表上创建d表的外键就可以了

很是支持。刚我想用的是用check约束,限制c表的值必须在a和b表的范围内。但这需要用到子查询,这在oracle的check约束中是不成立的。
------解决方案--------------------
外键是符合范式的表的一个数据约束,你这表本身就是为了性能或者业务违反范式的,加什么外键。
------解决方案--------------------
引用:
Quote: 引用:

你可以再创建一个表,如d表,里面存放a、b表的id值,在c表上创建d表的外键就可以了

很是支持。刚我想用的是用check约束,限制c表的值必须在a和b表的范围内。但这需要用到子查询,这在oracle的check约束中是不成立的。


把a,b表建个视图也不行么?