Statement A: “aadhaar is a candidate key in the Customer relation.”
A candidate key is a minimal set of attributes that functionally determines all other attributes in a relation and is unique for every tuple.
In the Customer relation, the primary key is explicitly declared as $\texttt{email}$. No uniqueness constraint is imposed on $\texttt{aadhaar}$. As a foreign key, $\texttt{aadhaar}$ may appear multiple times (e.g., if a single person holds multiple customer accounts with different emails). Hence, $\texttt{aadhaar}$ is not guaranteed to be unique, and therefore cannot be a candidate key.
To illustrate, consider the following instance of Customer:
$$
\begin{array}{|c|c|c|c|}
\hline
\texttt{name} & \texttt{email} & \texttt{phone} & \texttt{aadhaar} \\
\hline
\text{Rahul} & \text{[email protected]} & 9876543210 & A123 \\
\text{Rahul} & \text{[email protected]} & 9876500000 & A123 \\
\hline
\end{array}
$$
Here, the same $\texttt{aadhaar = A123}$ appears in two distinct tuples, violating uniqueness. Thus, $\texttt{aadhaar}$ is not a candidate key in Customer.
Statement B: phone can be $\texttt{NULL}$ in the Customer relation.
In standard relational database systems, unless explicitly constrained with a $\texttt{NOT NULL}$ clause, a column allows $\texttt{NULL}$ values by default. The schema for Customer defines schema for phone but with no constraints of NULL
with no $\texttt{NOT NULL}$ clause. Therefore, $\texttt{phone}$ is nullable.
For example, a record with a missing phone number is valid:
$$
\begin{array}{|c|c|c|c|}
\hline
\texttt{name} & \texttt{email} & \texttt{phone} & \texttt{aadhaar} \\
\hline
\text{Priya} & \text{[email protected]} & \texttt{NULL} & B456 \\
\hline
\end{array}
$$
Statement B is true.
Statement C: “aadhaar is a candidate key in the Person relation.”
In the Person relation, $\texttt{aadhaar}$ is declared as the PRIMARY KEY. By definition, a primary key is a candidate key—specifically, the one chosen by the designer to uniquely identify tuples.
Since $\texttt{aadhaar}$ is a primary key, it is:
- Unique across all tuples,
- Non-null,
- Minimal (single attribute).
Hence, it qualifies as a candidate key.
Example instance of Person:
$$
\begin{array}{|c|c|}
\hline
\texttt{aadhaar} & \texttt{name} \\
\hline
A123 & \text{Rahul} \\
B456 & \text{Priya} \\
C789 & \text{Anjali} \\
\hline
\end{array}
$$
Each $\texttt{aadhaar}$ value is distinct and identifies a unique person.
Statement C is true.
Statement D: “aadhaar can be NULL in the Person relation.”
In SQL, primary key attributes cannot be NULL. This is a core integrity constraint: a primary key must uniquely and unambiguously identify each tuple, which is impossible if any component is missing.
Since $\texttt{aadhaar}$ is the primary key of Person, it must be non-null.
Thus, the following insertion would be rejected:
The correct statements are B and C.