Several concepts need to be clarified:
1) Candidate Key: the value of an attribute group in a link uniquely identifies a tuples. If any attribute is removed from this attribute group, it does not have this property, such an attribute group is called a candidate code.
2) primary key: when multiple candidate codes exist, you can select one as the primary code. The selected candidate code is called the primary key.
3) Foreign key: An Attribute Group in relational R. It is not a candidate code of R, but it corresponds to the candidate code of another relational S, this attribute group is the outer code or foreign key of R.
For example:
There are two relationships:
Student (s #, sname, D #) has three attributes: Student ID, name, and department
Dep (D #, dname), that is, the Department has two attributes: department number, Department name
S # And d # Are primary keys, which are the only candidate keys for their respective relations. D # Is the foreign key of student.