Example 1 The following statement defines a storage map for the employees relation in MF_PERSONNEL. DEFINE STORAGE MAP EMPLOYEES_MAP DESCRIPTION IS /* EMPLOYEES partitioned by EMPLOYEE_ID */ FOR EMPLOYEES RELATION STORE USING EMPLOYEE_ID WITHIN EMPIDS_LOW WITH LIMIT OF "00200"; EMPIDS_MID WITH LIMIT OF "00400"; EMPIDS_OVER END EMPLOYEES_MAP STORAGE MAP. Example 2 The following example shows how to define a storage map that stores all records from a relation in the named storage area: RDO> DEFINE STORAGE MAP SALARY_HISTORY_MAP cont> DESCRIPTION IS /* Map for salary history records */ cont> FOR SALARY_HISTORY RELATION cont> STORE WITHIN SALARY_HISTORY cont> END SALARY_HISTORY_MAP STORAGE MAP. This statement stores all the records from the SALARY_HISTORY relation into the storage area, SALARY_HISTORY. SALARY_HISTORY is the name of a storage area that was created with the DEFINE DATABASE statement. Example 3 The following example uses the PLACEMENT VIA INDEX clause to store records in a storage area according to a hashed index: RDO> DEFINE STORAGE MAP DEPARTMENTS_MAP cont> FOR DEPARTMENTS RELATION cont> STORE WITHIN DEPARTMENTS cont> PLACEMENT VIA INDEX DEPARTMENTS_INDEX cont> END DEPARTMENTS_MAP STORAGE MAP. Example 4 The following example defines a database and two relations that contain segmented strings. The two relations are mapped along with their segmented strings to separate storage areas. DEFINE DATABASE SEGSTR_0 DESCRIPTION IS /* This database is used to show the Oracle Rdb segmented string support. Two relations that contain segmented strings are mapped along with their segmented string data to separate storage areas. */ DICTIONARY IS NOT USED DEFINE STORAGE AREA RDB$SYSTEM FILENAME 'SEGSTR_0' END DEFINE STORAGE AREA SEGSTR_1 FILENAME 'SEGSTR_1' END DEFINE STORAGE AREA SEGSTR_2 FILENAME 'SEGSTR_2' END DEFINE STORAGE AREA SEGSTR_SS1 FILENAME 'SEGSTR_SS1' END DEFINE STORAGE AREA SEGSTR_SS2 FILENAME 'SEGSTR_SS2' END SEGMENTED STRING STORAGE AREA IS SEGSTR_SS2. DEFINE FIELD STANDARD_DATE DATATYPE DATE. DEFINE FIELD TITLE DATATYPE TEXT SIZE 50. DEFINE FIELD DIARY_ENTRY DATATYPE SEGMENTED STRING SUB_TYPE TEXT SEGMENT_LENGTH 200. DEFINE RELATION DAILY_DIARY DESCRIPTION /* Simple diary */. ENTRY_DATE BASED ON STANDARD_DATE. TITLE. DIARY_ENTRY. END. DEFINE RELATION SPECIAL_EVENTS DESCRIPTION IS /* Special events - birthdays, anniversaries, etc. */. EVENT_DATE BASED ON STANDARD_DATE. EVENT_NAME BASED ON TITLE. EVENT_DESCRIPTION BASED ON DIARY_ENTRY. SPECIAL_INSTRUCTIONS BASED ON DIARY_ENTRY. END. DEFINE STORAGE MAP DAILY_DIARY_MAP DESCRIPTION IS /* Diary entries are randomly partitioned over two areas */ FOR DAILY_DIARY STORE WITHIN SEGSTR_1; SEGSTR_2 END. DEFINE STORAGE MAP SPECIAL_EVENTS_MAP DESCRIPTION IS /* Special events entries are stored in one area */ FOR SPECIAL_EVENTS STORE WITHIN SEGSTR_1 END. DEFINE STORAGE MAP DIARY_TEXT DESCRIPTION IS /* Keep segmented strings in separate areas */ FOR SEGMENTED STRINGS STORE WITHIN SEGSTR_SS1 FOR DAILY_DIARY, SPECIAL_EVENTS.EVENT_DESCRIPTION; SEGSTR_SS2 FOR DAILY_DIARY; SEGSTR_1 FOR SPECIAL_EVENTS.SPECIAL_INSTRUCTIONS; RDB$SYSTEM ! RDB$SYSTEM stores other segmented strings END. Example 5 In the following example, three new storage areas (EMPIDS_LOW_ UNIFORM, EMPIDS_MID_UNIFORM, and EMPIDS_OVER_UNIFORM) and a new relation (EMPLOYEES2) are defined in the MF_PERSONNEL database. Then a storage map is defined so that new EMPLOYEES2 records are stored in either the EMPIDS_LOW_UNIFORM, EMPIDS_MID_UNIFORM, or EMPIDS_OVER_UNIFORM storage areas, depending on the value stored in the LAST_NAME field. RDO> CHANGE DATABASE FILENAME MF_PERSONNEL cont> DEFINE STORAGE AREA EMPIDS_LOW_UNIFORM cont> FILENAME EMPIDS_LOW_UNIFORM.RDA cont> END EMPIDS_LOW_UNIFORM STORAGE AREA cont> DEFINE STORAGE AREA EMPIDS_MID_UNIFORM cont> FILENAME EMPIDS_MID_UNIFORM.RDA cont> END EMPIDS_MID_UNIFORM STORAGE AREA cont> DEFINE STORAGE AREA EMPIDS_OVER_UNIFORM cont> FILENAME EMPIDS_OVER_UNIFORM.RDA cont> END EMPIDS_OVER_UNIFORM STORAGE AREA. RDO> ! RDO> INVOKE DATABASE FILENAME MF_PERSONNEL RDO> ! RDO> DEFINE RELATION EMPLOYEES2 cont> DESCRIPTION IS /* new relation for testing */. cont> EMPLOYEE_ID BASED ON ID_NUMBER. cont> /* Generic last name */ cont> LAST_NAME DATATYPE IS TEXT SIZE IS 14. cont> /* Generic first name */ cont> FIRST_NAME DATATYPE IS TEXT SIZE IS 10. cont> /* Generic middle initial */ cont> MIDDLE_INITIAL DATATYPE IS TEXT SIZE IS 1. cont> /* Street name */ cont> ADDRESS_DATA_1 DATATYPE IS TEXT SIZE IS 25. cont> /* Mail stops, suite addresses, street numbers, etc. */ cont> ADDRESS_DATA_2 DATATYPE IS TEXT SIZE IS 25. cont> /* City name */ cont> CITY DATATYPE IS TEXT SIZE IS 20. cont> /* State abbreviation (or DISTRICT) */ cont> STATE DATATYPE IS TEXT SIZE IS 2. cont> /* Postal code (in US = ZIP) */ cont> POSTAL_CODE DATATYPE IS TEXT SIZE IS 5. cont> /* M, F */ cont> SEX DATATYPE IS TEXT SIZE IS 1. cont> BIRTHDAY BASED ON STANDARD_DATE. cont> /* A number */ cont> STATUS_CODE DATATYPE IS TEXT SIZE IS 1. cont> END EMPLOYEES2 RELATION. RDO> ! RDO> DEFINE STORAGE MAP EMP2_LAST_NAME_MAP cont> FOR EMPLOYEES2 RELATION cont> STORE USING LAST_NAME cont> WITHIN EMPIDS_LOW_UNIFORM WITH LIMIT OF "IRONS" cont> THRESHOLDS ARE (70,80,95); cont> EMPIDS_MID_UNIFORM WITH LIMIT OF "QUIST"; cont> EMPIDS_OVER_UNIFORM cont> DEFAULT THRESHOLDS ARE (60,70,80) cont> END EMP2_LAST_NAME_MAP STORAGE MAP. Note that the EMPIDS_LOW_UNIFORM storage area receives the threshold values of (70,80,95) specified with the THRESHOLDS clause, and the EMPIDS_MID_UNIFORM and EMPIDS_OVER_UNIFORM storage areas receive the default threshold values of (60,70,80) specified with the DEFAULT THRESHOLDS clause.