a key field is a field (or column) which is indexed and means that this column can be used to eaily find data
A primary key (PK) is, if you like an extension of that.. its a field or column that is indexed, but it is unique in the table. A primary key is a column which uniquely identifies that record, and is often used elsehwere as a foreign key in realtional databases
A foreign key (FK) is a value that identifies a unique value in another table. say you had a db identifying cars, you may have a car manufacturer table (eg Ford, BMW, Saab etc..) and a model table (eg Escort, Feista, Ka etc...)
the manufacturer table will have a primary key, which is replicated in the model table so that you know that Ford made the Excort, Rover made the SD1. there may be multiple occurances of the manufacturer ID in the model table, but only one instance in the manufacturer table
you can define keys that have unique values, but these aren't neccesarily the Priamry Key)
you can define keys that are comprised of muliple columns of fields, these can be primary keys, these can be 'just' indexed (although there is very little use in practise for composite keys that are NOT primary keys)
incidentally when designing tables sometimes its best to use an autogenerated primary key (a 'surroagte' key), sometimes its better to use an actual value (a 'natural' key). You would use a surrogate key if you couldn't find an appropriate natural key, or their were several contenders, or the natural key would be a complex composite key. In an ideal world you do not want your primary key to change, ideally never, but occasional is OK).... because changing a primary key would ential changing every value referrign to that key in every child table, and proiabbly banjax the indexes.
selecting whether to use a natural or surrogate key can cause fiifulties... histroically you would use a surroagte key for manufacturer (reason: primarily space), these days its perfectly acceptable to use say a code or even the value itself. In the car manufacturer table I wouldnt' use the full manufactiruer name, as you have the likes of Koenigzegg, but a code may be appropriate.. the reason it may save you time havign to do joins and lookups, it makes the data easier to read.. but ulitmately its personal choice