The comprehensive way of learning about Zotero's database structures is by digging into the files.
You should not use path unless you absolutely have to, since accessing it directly breaks the threadsafe guarantees of this API. By default returns data for all book_ids, pass in a list of book ids if you only want some data. If a particular value could not be decoded, uses default for it.
except that it returns a Proxy Metadata object that only reads values from the database on demand. fields must be a list of 2-tuples of the form (field_name, ascending=True or False). A safe read lock is a lock that does nothing if the thread already has a write lock, otherwise it acquires a read lock.
This is much faster than get_metadata when only a small number of fields need to be accessed from the returned metadata object. This is necessary to prevent Downgrade Lock Errors, which can happen when updating the search cache in the presence of composite columns.
Updating the search cache holds an exclusive lock, but searching a composite column involves reading field values via Proxy Metadata which tries to get a shared lock.
Apart from the viewer, open with and edit book, I don’t believe any of the others do any file write I/O with the results of this call.