Node:Data Tables, Next:Determinacy Detection, Previous:Indexing Overview, Up:Indexing
The major advantage of indexing is that it provides fast access to
tables of data. For example, a table of employee records might be
represented as shown below in order to gain fast access to the records
by employee name:
% employee(LastName,FirstNames,Department,Salary,DateOfBirth) employee('Smith', ['John'], sales, 20000, 1-1-59). employee('Jones', ['Mary'], engineering, 30000, 5-28-56). ...
If fast access to the data via department is also desired, the data can
be organized little differently. The employee records can be
indexed by some unique identifier, such as employee number, and
additional tables can be created to facilitate access to this table, as
shown in the example below. For example,
% employee(Id,LastName,FirstNames,Department,Salary,DateOfBirth) employee(1000000, 'Smith', ['John'], sales, 20000, 1-1-59). employee(1000020, 'Jones', ['Mary'], engineering, 30000, 5-28-56). ... % employee_name(LastName,EmpId) employee_name('Smith', 1000000). employee_name('Jones', 1000020). ... % department_member(Department,EmpId) department_member(sales, 1000000). department_member(engineering, 1000020). ...
Indexing would now allow fast access to the records of every
employee named Smith, and these could then be backtracked through
looking for John Smith. For example:
| ?- employee_name('Smith', Id), employee(Id, 'Smith', ['John'], Dept, Sal, DoB).
Similarly, all the members of the engineering
department born since 1965 could be efficiently found like this:
| ?- department_member(engineering, Id), employee(Id, LN, FN, engineering, _, M-D-Y), Y > 65.