【问题标题】:APEX get Multiple entries FKAPEX 获得多个条目 FK
【发布时间】:2019-12-09 19:17:33
【问题描述】:

,我不知道为什么要搜索我的问题。 我认为它很简单,但我不知道:)

我有一个表格,其中列出了我所有的“组/团队”

SCA_TEAM
TEA_ID   PK
TEA_NAME
TEA_DATE_CREATED
TEA_CREATED_BY
TEA_DATE_MODIFIED
TEA_MODIFIED_BY

然后我有一个用户表,其中列出了所有人员:

SCA_USERS
USR_ID  PK
USR_NAME
USR_DEPARTMENT
USR_TEA_ID FK
USR_DATE_CREATED
USR_CREATED_BY
USR_DATE_MODIFIED
USR_MODIFIED_BY

我使用 APEX 18.1 并有一个包含值列表的表单,我可以在其中选择我在另一个表中添加的组之一...

所以我的问题是,如何将更多组分配给一个用户? 我需要添加更多 FK 列吗?或者我可以存储多个 ID 1;2;3;等等。

最好的情况是我可以选择一个组,然后单击“加号”并选择另一个..

我希望你明白我想说什么

感谢您的帮助

最好的问候 丹尼尔

【问题讨论】:

    标签: sql oracle inner-join oracle-apex


    【解决方案1】:

    Apex 提供允许多项选择的选择列表(以及穿梭)项目。如果将这些值存储到数据库列中,它们将存储为冒号分隔的值。例如,如果您选择 Roma、Juventus 和 Inter,它们将被存储为 Roma:Juventus:Inter(实际上,它们的 return 值是一些 ID,例如23:8846:2231)。没问题,你有你想要的。

    但是,这样的原则是 晚安,标准化,因为您对此无能为力。如果您想显示隐藏在这样一个存储 ID 列表后面的值,则必须将该字符串拆分为行并将其与 master 表连接。当然,这并非不可能,但需要一些编码。例如:

    SQL> select * From sca_team;
    
        TEA_ID TEA_NAME
    ---------- --------------------
             1 Roma
             2 Juventus
             3 Inter
    
    SQL> select * from sca_users;
    
        USR_ID TEAMS
    ---------- --------------------
           103 2:3:1
    
    SQL> select t.tea_name
      2  from sca_team t join
      3    (select regexp_substr(u.teams, '[^:]+', 1, level) team_id
      4     from sca_users u
      5     where u.usr_id = 103
      6     connect by level <= regexp_count(u.teams, ':') + 1
      7    ) x on x.team_id = t.tea_id
      8  order by t.tea_name;
    
    TEA_NAME
    --------------------
    Inter
    Juventus
    Roma
    
    SQL>
    

    更糟糕的是 - 如果有人手动编辑这样的列值,他们可以输入 master 表中不存在的无效 ID。换句话说,不维护参照完整性。

    因此,虽然你可以这样做,但我不建议这样做。

    处理这种情况的通常方法是创建一个包含值对的新表,例如

    create table user_x_team
      (usr_id    number    constraint fk_uxt_user references sca_users (usr_id),
       tea_id    number    constraint fk_uxt_team references sca_team  (tea_id),
       --
       constraint pk_uxt primary key (usr_id, tea_id)
      );
    
    • 外键约束将确保您不能为用户或团队输入无效值
    • 主键约束确保您不能有重复项

    在 Apex 中,您可以选择 交互式网格 来处理这种情况,因为它允许您输入任意数量的行(只需按“添加行”按钮)。

    【讨论】:

    • 哇,谢谢你的回答!这将帮助我解决我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2021-09-12
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多