栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

检查约束调用函数Oracle SQL开发人员

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

检查约束调用函数Oracle SQL开发人员

您要确保 AccountIDRegularID 列一起唯一,无论 OpenID 有多少个值。

正如您已经确定的那样,执行此操作的唯一方法是对其进行 约束 。您会在注释中注意到您已尝试使用触发器。这并 没有
在数据库中限制值,它只是确保它试图启用触发器时进行验证。我希望当您尝试它时,收到错误消息 “ ORA-04091:正在变异,触发器/功能可能看不到它”。
从表中选择时,您正在更改(插入或更新)过程中。

如果您必须对此加以限制,那就是您应该做的。这样做的问题是您的表未规范化。因此,将其标准化。使用两个表,而不要使用一个表。

首先,您需要您的 RegularIDAccountID
上是唯一的,这意味着它应该在此级别存储。

tbl_UserAccounts
在此标识符上似乎是唯一的,因此请更改此表并在其中存储您的 RegularID

接下来,您需要一个表,该表具有与用户可能想要的一样多的 OpenID 。这意味着您需要一个在 AccountIDOpenID
1上唯一的表。

create table openid_account_auth (   , account_id number(4,0)   , open_id number(4,0)   , constraint pk_openid_account_auth       primary key (account_id, open_id)   , constraint fk_openid_account_auth_accid       foreign key (account_id)       references tbl_UserAccounts(account_id)   , constraint fk_openid_account_auth_open       foreign key (open_id)       references tbl_OpenID (openid)     );

此表(以及您自己的表)上的一点表示,多个帐户可以具有相同的 OpenID 。如果您不打算这样做,则应在其中添加 AccountID
作为外键

tbl_OpenID
,这是确保每个 OpenID 仅与一个 AccountID 关联的唯一方法。

如果确实需要使用该视图,则可以创建视图以相同的方式获取信息。我不确定你为什么会这么做。

create or replace view AccountAuthentications as select account_id, regular_id, null   from user_accounts  union all select account_id, null, open_id   from openid_account_auth;

简而言之,除非受到严格的约束,否则您应该始终在自然级别存储数据,并使用数据库来确保保持完整性。如果随后需要稍微不同地使用数据,则可以使用视图或实例化视图等。

1.很抱歉,但是我不能让自己在每个表的名称前加上

tbl_



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号