The document describes a graph-based method for finding all candidate keys in a relational database scheme. It first presents how to construct a functional dependency graph (FDG) from the functional dependencies in a relational scheme. It then describes a two-phase process to transform the FDG into a candidate graph (GC) that contains only the candidate nodes. The first phase involves augmenting the FDG by adding new edges and nodes. The second phase reduces the augmented graph by deleting nodes and edges according to certain rules. From the resulting GC, all candidate keys for the relational scheme can be identified as either individual candidate nodes or parts of cycles in the graph. Theorems are also presented regarding properties of the candidate graph and