In practice, the functional complexity is limited by the uneven implementations by developers and commercial vendors. The syntax of Z39.50 is abstracted from the underlying database structure. For example, if the client specifies an author search using attribute 1003, the server must determine how to map that search to the indexes it contains. This allows Z39.50 queries to be formulated without knowing anything about the target database, but it also means that results for the same query can vary widely among different servers. One server may have an author index and another may use its index of personal names, whether they are authors or not. A third may have no name index and fall back on its keyword index, and yet another may have no suitable index and return an error.