---
title: SAIF.Business.Menu database tables
summary: Database tables used by this library with relationships and usage context.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-17
library: SAIF.Business.Menu
reference_type: package
---

# SAIF.Business.Menu database tables

This page catalogs the 8 Oracle tables (7 business tables plus the `DUAL` pseudo-table) accessed by `SAIF.Business.Menu`. No `OWNER.TABLE` schema qualifier appears anywhere in the source, so schema/owner is recorded as unknown (`[unqualified]**`) for every table rather than inferred from table-name prefixes.

## Table catalog

| Table | Database | Schema/Link | CRUD | Purpose | Primary business object |
| --- | --- | --- | --- | --- | --- |
| [MENU_PAGE](#menu_page) | Oracle | `[unqualified]`** | CRUD | Stores the page definition placed into the menu — the page link, display name, and toolbar/tooltip flags. | `clsMenuPage` |
| [MENU_ITEM](#menu_item) | Oracle | `[unqualified]`** | CRUD | Places a menu page within a category, carrying its own security context and display order. | `clsMenuItem` |
| [MENU_CATEGORY_CODE](#menu_category_code) | Oracle | `[unqualified]`** | CRUD | Category lookup used to group menu items (e.g., for tabbed or sectioned navigation). | `clsMenuCategoryCode` |
| [MENU_SECURITY](#menu_security) | Oracle | `[unqualified]`** | CRUD | Maps a menu item to a security group, granting every member of that group access to the item. | `clsMenuSecurity` |
| [MENU_SECURITY_USER](#menu_security_user) | Oracle | `[unqualified]`** | CRUD | Maps a user to a security group, establishing which menu-security grants apply to them. | `clsMenuSecurityUser` |
| [MENU_FAVORITE](#menu_favorite) | Oracle | `[unqualified]`** | CRUD | Records a user's favorite menu item, including its display order and optional inactive date. | `clsMenuFavorite` |
| [BUSONLINE_APPS_CODE](#busonline_apps_code) | Oracle | `[unqualified]`** | CRUD | Application code lookup: maps a short code to its registered virtual application path and active status. | `clsApplicationCode` |
| [DUAL](#dual) | Oracle | `[unqualified]`** | R | Oracle pseudo-table used only to fetch the next value of a sequence via `SEQ.NEXTVAL`. | `clsMenuFavorite` |

## MENU_PAGE

| Field | Value |
| --- | --- |
| **Database** | Oracle |
| **Schema/Link** | `[unqualified]`** |
| **Purpose** | Stores the page definition placed into the menu — the page link, display name, and toolbar/tooltip flags. |
| **Access pattern** | Direct inline SQL and StringBuilder-assembled SQL through the SAIF BOF data portal |
| **CRUD operations** | CRUD |
| **Key columns used** | MENU_PAGE_SEQ_NUM (PK), APPLICATION_CODE (FK to BUSONLINE_APPS_CODE), PAGE_LINK, PAGE_NAME |
| **Sequence** | MENU_PAGE_SEQ |
| **Related tables** | BUSONLINE_APPS_CODE, MENU_ITEM |
| **Business objects** | `clsMenuPage`, `clsMenuPageCollection` |

### Operations referencing this table
- [Create a menu item](operations/op-menu-06-create-menu-item.md)
- [Resolve a user's authorized menu items](operations/op-menu-01-resolve-authorized-menu-items.md)
- [Update or delete a maintained object](operations/op-menu-07-update-delete-maintained-object.md)

### Business rules referencing this table
- [BR-MENU-016](business-rules.md#br-menu-016-audit-stamp-on-insert-and-update)
- [BR-MENU-019](business-rules.md#br-menu-019-yn-boolean-flag-storage)

### SQL referencing this table
- [SQL-009: Insert a new menu page](sql/SQL-009-insert-menu-page.md)
- [SQL-015: Retrieve a user's authorized menu items](sql/SQL-015-retrieve-authorized-menu-items-for-user.md)
- [SQL-016: Retrieve authorized menu items for all users](sql/SQL-016-retrieve-all-authorized-menu-items.md)
- [SQL-024: Retrieve one menu page by sequence number](sql/SQL-024-retrieve-menu-page-by-seq.md)
- [SQL-025: Retrieve all menu pages](sql/SQL-025-retrieve-all-menu-pages.md)
- [SQL-035: Update a menu page](sql/SQL-035-update-menu-page.md)
- [SQL-042: Delete a menu page](sql/SQL-042-delete-menu-page.md)

---

## MENU_ITEM

| Field | Value |
| --- | --- |
| **Database** | Oracle |
| **Schema/Link** | `[unqualified]`** |
| **Purpose** | Places a menu page within a category, carrying its own security context and display order. |
| **Access pattern** | Direct inline SQL and StringBuilder-assembled SQL through the SAIF BOF data portal |
| **CRUD operations** | CRUD |
| **Key columns used** | MENU_ITEM_SEQ_NUM (PK), MENU_PAGE_SEQ_NUM (FK to MENU_PAGE), MENU_CATEGORY_CODE (FK to MENU_CATEGORY_CODE) |
| **Sequence** | MENU_ITEM_SEQ |
| **Related tables** | MENU_PAGE, MENU_CATEGORY_CODE, MENU_SECURITY, MENU_FAVORITE |
| **Business objects** | `clsMenuItem`, `clsMenuItemCollection` |

### Operations referencing this table
- [Create a menu item](operations/op-menu-06-create-menu-item.md)
- [Resolve a user's authorized menu items](operations/op-menu-01-resolve-authorized-menu-items.md)
- [Update or delete a maintained object](operations/op-menu-07-update-delete-maintained-object.md)

### Business rules referencing this table
- [BR-MENU-004](business-rules.md#br-menu-004-unsecured-items-open-to-all)
- [BR-MENU-016](business-rules.md#br-menu-016-audit-stamp-on-insert-and-update)
- [BR-MENU-019](business-rules.md#br-menu-019-yn-boolean-flag-storage)

### SQL referencing this table
- [SQL-008: Insert a new menu item](sql/SQL-008-insert-menu-item.md)
- [SQL-015: Retrieve a user's authorized menu items](sql/SQL-015-retrieve-authorized-menu-items-for-user.md)
- [SQL-016: Retrieve authorized menu items for all users](sql/SQL-016-retrieve-all-authorized-menu-items.md)
- [SQL-022: Retrieve one menu item by sequence number](sql/SQL-022-retrieve-menu-item-by-seq.md)
- [SQL-023: Retrieve all menu items](sql/SQL-023-retrieve-all-menu-items.md)
- [SQL-034: Update a menu item](sql/SQL-034-update-menu-item.md)
- [SQL-041: Delete a menu item](sql/SQL-041-delete-menu-item.md)

---

## MENU_CATEGORY_CODE

| Field | Value |
| --- | --- |
| **Database** | Oracle |
| **Schema/Link** | `[unqualified]`** |
| **Purpose** | Category lookup used to group menu items (e.g., for tabbed or sectioned navigation). |
| **Access pattern** | Direct inline SQL and StringBuilder-assembled SQL through the SAIF BOF data portal |
| **CRUD operations** | CRUD |
| **Key columns used** | CODE (PK, caller-supplied), CODE_DESCR |
| **Sequence** | N/A — CODE is caller-supplied, not sequence-assigned |
| **Related tables** | MENU_ITEM |
| **Business objects** | `clsMenuCategoryCode`, `clsMenuCategoryCodeCollection` |

### Operations referencing this table
- [Create a menu item](operations/op-menu-06-create-menu-item.md)
- [Resolve a user's authorized menu items](operations/op-menu-01-resolve-authorized-menu-items.md)
- [Update or delete a maintained object](operations/op-menu-07-update-delete-maintained-object.md)

### SQL referencing this table
- [SQL-006: Insert a new menu category code](sql/SQL-006-insert-menu-category-code.md)
- [SQL-015: Retrieve a user's authorized menu items](sql/SQL-015-retrieve-authorized-menu-items-for-user.md)
- [SQL-016: Retrieve authorized menu items for all users](sql/SQL-016-retrieve-all-authorized-menu-items.md)
- [SQL-017: Retrieve one menu category code](sql/SQL-017-retrieve-menu-category-code-by-code.md)
- [SQL-018: Retrieve all menu category codes](sql/SQL-018-retrieve-all-menu-category-codes.md)
- [SQL-032: Update a menu category code](sql/SQL-032-update-menu-category-code.md)
- [SQL-039: Delete a menu category code](sql/SQL-039-delete-menu-category-code.md)

---

## MENU_SECURITY

| Field | Value |
| --- | --- |
| **Database** | Oracle |
| **Schema/Link** | `[unqualified]`** |
| **Purpose** | Maps a menu item to a security group, granting every member of that group access to the item. |
| **Access pattern** | Direct inline SQL and StringBuilder-assembled SQL through the SAIF BOF data portal |
| **CRUD operations** | CRUD |
| **Key columns used** | MENU_SECURITY_SEQ_NUM (PK), MENU_ITEM_SEQ_NUM (FK to MENU_ITEM), SECURITY_GROUP_TXT |
| **Sequence** | MENU_SECURITY_SEQ |
| **Related tables** | MENU_ITEM, MENU_SECURITY_USER |
| **Business objects** | `clsMenuSecurity`, `clsMenuSecurityCollection` |

### Operations referencing this table
- [Create a menu item](operations/op-menu-06-create-menu-item.md)
- [Resolve a user's authorized menu items](operations/op-menu-01-resolve-authorized-menu-items.md)
- [Load security grants for an item](operations/op-menu-10-load-security-grants-for-item.md)
- [Update or delete a maintained object](operations/op-menu-07-update-delete-maintained-object.md)

### Business rules referencing this table
- [BR-MENU-002](business-rules.md#br-menu-002-group-granted-authorization)
- [BR-MENU-003](business-rules.md#br-menu-003-case-insensitive-group-matching)
- [BR-MENU-004](business-rules.md#br-menu-004-unsecured-items-open-to-all)
- [BR-MENU-016](business-rules.md#br-menu-016-audit-stamp-on-insert-and-update)
- [BR-MENU-021](business-rules.md#br-menu-021-cascading-child-security-group-save)

### SQL referencing this table
- [SQL-010: Insert a new security-group grant](sql/SQL-010-insert-menu-security.md)
- [SQL-015: Retrieve a user's authorized menu items](sql/SQL-015-retrieve-authorized-menu-items-for-user.md)
- [SQL-016: Retrieve authorized menu items for all users](sql/SQL-016-retrieve-all-authorized-menu-items.md)
- [SQL-026: Retrieve one security grant by sequence number](sql/SQL-026-retrieve-menu-security-by-seq.md)
- [SQL-027: Retrieve all security grants](sql/SQL-027-retrieve-all-menu-security.md)
- [SQL-028: Retrieve security grants for one menu item](sql/SQL-028-retrieve-menu-security-for-item.md)
- [SQL-036: Update a security-group grant](sql/SQL-036-update-menu-security.md)
- [SQL-043: Delete a security-group grant](sql/SQL-043-delete-menu-security.md)

---

## MENU_SECURITY_USER

| Field | Value |
| --- | --- |
| **Database** | Oracle |
| **Schema/Link** | `[unqualified]`** |
| **Purpose** | Maps a user to a security group, establishing which menu-security grants apply to them. |
| **Access pattern** | Direct inline SQL and StringBuilder-assembled SQL through the SAIF BOF data portal |
| **CRUD operations** | CRUD |
| **Key columns used** | MENU_SECURITY_USER_SEQ_NUM (PK, assigned inline from MENU_SECURITY_USER_SEQ.NEXTVAL), SECURITY_GROUP_TXT, MENU_USER_ID |
| **Sequence** | MENU_SECURITY_USER_SEQ (fetched inline in the INSERT, not as a separate statement) |
| **Related tables** | MENU_SECURITY |
| **Business objects** | `clsMenuSecurityUser`, `clsMenuSecurityUserCollection` |

### Operations referencing this table
- [Create a menu item](operations/op-menu-06-create-menu-item.md)
- [Resolve a user's authorized menu items](operations/op-menu-01-resolve-authorized-menu-items.md)
- [Load a user's group memberships](operations/op-menu-09-load-user-group-memberships.md)
- [Update or delete a maintained object](operations/op-menu-07-update-delete-maintained-object.md)

### Business rules referencing this table
- [BR-MENU-002](business-rules.md#br-menu-002-group-granted-authorization)
- [BR-MENU-003](business-rules.md#br-menu-003-case-insensitive-group-matching)

### SQL referencing this table
- [SQL-011: Insert a new group membership](sql/SQL-011-insert-menu-security-user.md)
- [SQL-015: Retrieve a user's authorized menu items](sql/SQL-015-retrieve-authorized-menu-items-for-user.md)
- [SQL-016: Retrieve authorized menu items for all users](sql/SQL-016-retrieve-all-authorized-menu-items.md)
- [SQL-029: Retrieve all group memberships](sql/SQL-029-retrieve-all-menu-security-users.md)
- [SQL-030: Retrieve group memberships for one user](sql/SQL-030-retrieve-menu-security-users-for-user.md)
- [SQL-037: Update a group membership](sql/SQL-037-update-menu-security-user.md)
- [SQL-044: Delete a group membership](sql/SQL-044-delete-menu-security-user.md)

---

## MENU_FAVORITE

| Field | Value |
| --- | --- |
| **Database** | Oracle |
| **Schema/Link** | `[unqualified]`** |
| **Purpose** | Records a user's favorite menu item, including its display order and optional inactive date. |
| **Access pattern** | Direct inline SQL and StringBuilder-assembled SQL through the SAIF BOF data portal |
| **CRUD operations** | CRUD |
| **Key columns used** | MENU_FAVORITE_SEQ_NUM (PK), MENU_ITEM_SEQ_NUM (FK to MENU_ITEM), ITEM_INACTIVE_DATE |
| **Sequence** | MENU_FAVORITE_SEQ |
| **Related tables** | MENU_ITEM |
| **Business objects** | `clsMenuFavorite`, `clsMenuFavoriteCollection` |

### Operations referencing this table
- [Create a menu item](operations/op-menu-06-create-menu-item.md)
- [Resolve a user's authorized menu items](operations/op-menu-01-resolve-authorized-menu-items.md)
- [Load a user's favorites](operations/op-menu-08-load-user-favorites.md)
- [Update or delete a maintained object](operations/op-menu-07-update-delete-maintained-object.md)

### Business rules referencing this table
- [BR-MENU-005](business-rules.md#br-menu-005-favorites-appear-in-the-authorized-set)
- [BR-MENU-006](business-rules.md#br-menu-006-inactive-favorites-excluded)

### SQL referencing this table
- [SQL-007: Insert a new user favorite](sql/SQL-007-insert-menu-favorite.md)
- [SQL-015: Retrieve a user's authorized menu items](sql/SQL-015-retrieve-authorized-menu-items-for-user.md)
- [SQL-019: Retrieve one favorite by sequence number](sql/SQL-019-retrieve-menu-favorite-by-seq.md)
- [SQL-020: Retrieve all favorites for all users](sql/SQL-020-retrieve-all-menu-favorites.md)
- [SQL-021: Retrieve favorites for one user](sql/SQL-021-retrieve-menu-favorites-for-user.md)
- [SQL-033: Update a user favorite](sql/SQL-033-update-menu-favorite.md)
- [SQL-040: Delete a user favorite](sql/SQL-040-delete-menu-favorite.md)

---

## BUSONLINE_APPS_CODE

| Field | Value |
| --- | --- |
| **Database** | Oracle |
| **Schema/Link** | `[unqualified]`** |
| **Purpose** | Application code lookup: maps a short code to its registered virtual application path and active status. |
| **Access pattern** | Direct inline SQL and StringBuilder-assembled SQL through the SAIF BOF data portal |
| **CRUD operations** | CRUD |
| **Key columns used** | CODE (PK, caller-supplied), CODE_DESCR, ACTIVE_CODE |
| **Sequence** | N/A — CODE is caller-supplied, not sequence-assigned |
| **Related tables** | MENU_PAGE |
| **Business objects** | `clsApplicationCode`, `clsApplicationCodeCollection` |

### Operations referencing this table
- [Create a menu item](operations/op-menu-06-create-menu-item.md)
- [Load application codes](operations/op-menu-05-load-application-codes.md)
- [Resolve a user's authorized menu items](operations/op-menu-01-resolve-authorized-menu-items.md)
- [Update or delete a maintained object](operations/op-menu-07-update-delete-maintained-object.md)

### Business rules referencing this table
- [BR-MENU-012](business-rules.md#br-menu-012-application-resolution-by-virtual-path)
- [BR-MENU-013](business-rules.md#br-menu-013-active-only-application-filtering)

### SQL referencing this table
- [SQL-005: Insert a new application code](sql/SQL-005-insert-application-code.md)
- [SQL-012: Retrieve one application code by code](sql/SQL-012-retrieve-application-code-by-code.md)
- [SQL-013: Retrieve all application codes](sql/SQL-013-retrieve-all-application-codes.md)
- [SQL-014: Retrieve only active application codes](sql/SQL-014-retrieve-active-application-codes.md)
- [SQL-015: Retrieve a user's authorized menu items](sql/SQL-015-retrieve-authorized-menu-items-for-user.md)
- [SQL-016: Retrieve authorized menu items for all users](sql/SQL-016-retrieve-all-authorized-menu-items.md)
- [SQL-031: Update an application code](sql/SQL-031-update-application-code.md)
- [SQL-038: Delete an application code](sql/SQL-038-delete-application-code.md)

---

## DUAL

| Field | Value |
| --- | --- |
| **Database** | Oracle |
| **Schema/Link** | `[unqualified]`** |
| **Purpose** | Oracle pseudo-table used only to fetch the next value of a sequence via `SEQ.NEXTVAL`. |
| **Access pattern** | Direct inline SQL through the SAIF BOF data portal |
| **CRUD operations** | R |
| **Key columns used** | N/A |
| **Sequence** | N/A — target of all four scalar NEXTVAL statements ([SQL-001](sql/SQL-001-menu-favorite-next-seq.md)–[SQL-004](sql/SQL-004-menu-security-next-seq.md)) |
| **Related tables** | (none — not joined to any business table) |
| **Business objects** | `clsMenuFavorite`, `clsMenuItem`, `clsMenuPage`, `clsMenuSecurity` |

### Operations referencing this table
- [Create a menu item](operations/op-menu-06-create-menu-item.md)

### SQL referencing this table
- [SQL-001: Fetch next MENU_FAVORITE sequence value](sql/SQL-001-menu-favorite-next-seq.md)
- [SQL-002: Fetch next MENU_ITEM sequence value](sql/SQL-002-menu-item-next-seq.md)
- [SQL-003: Fetch next MENU_PAGE sequence value](sql/SQL-003-menu-page-next-seq.md)
- [SQL-004: Fetch next MENU_SECURITY sequence value](sql/SQL-004-menu-security-next-seq.md)

---

## Table relationship diagram

The following diagram shows relationships between tables used by this library, derived from the join predicates in [SQL-015](sql/SQL-015-retrieve-authorized-menu-items-for-user.md) and [SQL-016](sql/SQL-016-retrieve-all-authorized-menu-items.md) (the only statements that join across tables).

```mermaid
erDiagram
    BUSONLINE_APPS_CODE ||--o{ MENU_PAGE : "APP.CODE = PAG.APPLICATION_CODE"
    MENU_PAGE ||--o{ MENU_ITEM : "PAG.MENU_PAGE_SEQ_NUM = ITM.MENU_PAGE_SEQ_NUM"
    MENU_CATEGORY_CODE ||--o{ MENU_ITEM : "CAT.CODE = ITM.MENU_CATEGORY_CODE"
    MENU_ITEM ||--o{ MENU_SECURITY : "SEC.MENU_ITEM_SEQ_NUM = ITM.MENU_ITEM_SEQ_NUM"
    MENU_SECURITY ||--o{ MENU_SECURITY_USER : "upper(group text) match (not a surrogate key)"
    MENU_ITEM ||--o{ MENU_FAVORITE : "ITM.MENU_ITEM_SEQ_NUM = FAV.MENU_ITEM_SEQ_NUM"
    BUSONLINE_APPS_CODE {
        VARCHAR2 CODE PK
        VARCHAR2 CODE_DESCR
        VARCHAR2 ACTIVE_CODE
    }
    MENU_PAGE {
        NUMBER MENU_PAGE_SEQ_NUM PK
        VARCHAR2 APPLICATION_CODE FK
        VARCHAR2 PAGE_LINK
    }
    MENU_CATEGORY_CODE {
        VARCHAR2 CODE PK
        VARCHAR2 CODE_DESCR
    }
    MENU_ITEM {
        NUMBER MENU_ITEM_SEQ_NUM PK
        NUMBER MENU_PAGE_SEQ_NUM FK
        VARCHAR2 MENU_CATEGORY_CODE FK
    }
    MENU_SECURITY {
        NUMBER MENU_SECURITY_SEQ_NUM PK
        NUMBER MENU_ITEM_SEQ_NUM FK
        VARCHAR2 SECURITY_GROUP_TXT
    }
    MENU_SECURITY_USER {
        NUMBER MENU_SECURITY_USER_SEQ_NUM PK
        VARCHAR2 SECURITY_GROUP_TXT
        VARCHAR2 MENU_USER_ID
    }
    MENU_FAVORITE {
        NUMBER MENU_FAVORITE_SEQ_NUM PK
        NUMBER MENU_ITEM_SEQ_NUM FK
        DATE ITEM_INACTIVE_DATE
    }
```

`DUAL` is omitted from the diagram — it is an Oracle pseudo-table with no foreign-key relationship to any business table; it is used only as the source table for the four `SEQ.NEXTVAL` scalar statements ([SQL-001](sql/SQL-001-menu-favorite-next-seq.md)–[SQL-004](sql/SQL-004-menu-security-next-seq.md)).

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [SQL catalog](sql/index.md)
- [Security and authorization](security-authorization.md)
- [API reference](api/index.md)

> **Note:** Statements marked with `**` could not be confirmed; treat as unknown until verified. Schema/owner is recorded as `[unqualified]**` for every table because no `OWNER.TABLE` qualifier or connection string is present in the repository.

## Sources
- SAIF.Business.Menu/clsMenuAuthorizedItemCollection.vb
- SAIF.Business.Menu/clsMenuItem.vb
- SAIF.Business.Menu/clsMenuPage.vb
- SAIF.Business.Menu/clsMenuSecurity.vb
- SAIF.Business.Menu/clsMenuSecurityUser.vb
- SAIF.Business.Menu/clsMenuFavorite.vb
- SAIF.Business.Menu/clsMenuCategoryCode.vb
- SAIF.Business.Menu/clsApplicationCode.vb
