As you said, locate has a database and is therefore much faster, while find has to traverse the filesystem. But locate's database only contains filenames (with their paths), while find can select files based on other meta data like mtime or size. So it is my resume versatile. Also the database has to be updated in a batch effort, usually nightly, so files which have been created modified recently do not appear correctly. Also you can expect every modern Unix system to have find available, while not all systems have locate's database enabled.
So, locate is faster, use it to find the location of a file, find is more versatile. There is no universal better.