Superkeys of this relation - sql

I am trying to find the superkeys of this relation, but I am having troubles finding out how many superkeys there are and exactly what they are. I figured out that the candidate keys were {A},{B},{C},{D}.
Here is the relation:
R(A,B,C,D)
Functional Dependencies:
A->B
B->C
C->D
D->A
Candidate keys: {A},{B},{C},{D} (from what I figured out)
Can someone please help me find the superkeys, and how exactly to find them?

Let me keep it simple:
Here is a definition for super key and candidate key:
Super Key
Super key stands for superset of a key.
A Super Key is a set of one or more attributes that are taken collectively and can identify all other attributes uniquely.
Candidate Keys
Candidate Keys are super keys for which no proper subset is a super key. In other words candidate keys are minimal super keys.
Thus,any combination of candidate keys with other keys is a super key
In this example,
any combination of candidate keys of A,B,C,D is a Super key
Hope this helps!

Related

Candidate key or Super key

Consider a relational table with different columns, what would you call the collection of unique and not null values, super key or candidate key?
A Super key is a set or one of more columns to uniquely identify rows in a table.
Candidate keys are selected from the set of super keys, the only thing we take care while selecting candidate key is: It should not have any redundant attribute. That’s the reason they are also termed as minimal super key.
In Employee table there are Three Columns : Emp_Code,Emp_Number,Emp_Name
Super keys:
All of the following sets are able to uniquely identify rows of the employee table.
{Emp_Code}
{Emp_Number}
{Emp_Code, Emp_Number}
{Emp_Code, Emp_Name}
{Emp_Code, Emp_Number, Emp_Name}
{Emp_Number, Emp_Name}
Candidate Keys:
As I stated above, they are the minimal super keys with no redundant attributes.
{Emp_Code}
{Emp_Number}
As a Summary:
A Superkey is a set of columns that uniquely identifies a row.Whereas a Candidate key would be a MINIMAL set of columns that uniquely identifies a row. So essentially a Superkey is a Candidate key with extra unnecessary columns in it.

Special usage of candidate keys, Minimal nature

I know that,
"A candidate key is a minimal subset of a superkey"
That means there cannot be any other super keys inside a Candidate key.
What i don't understand is that,
Where can we use this special property of a candidate key in a database design.
Special property means:- "there cannot be superkeys inside a candidate key."
example explanation is highly appreciated.
Note : This question defers from the most answered question deference between keys, Finding/Identifying Candidate keys
I think the minimal nature of candidate keys are useful for unique constraints, in primary keys as well as user-defined unique constraints. These allow us to ensure that functional dependencies are uniquely represented in a database, which is important for data consistency.
If we used a non-minimal superkey as a primary key, we could record multiple rows with the same values for a subset of the primary key, varying only in the complement of the subset. If the subset is a determinant of a functional dependency, we could have inconsistent data.
For example, let's consider a simplified vehicle registration table. Every vehicle has a unique registration number and a unique engine number, so both attributes are candidate keys. Any superset of these is a superkey, e.g. the combination of the two.
I indicated the primary key in blue. As you can see, each row's primary key value is unique, but the table allowed the same vehicle_registration and engine_number to be recorded more than once, with different associated attributes. Is the vehicle with registration "abc123" an XC60 or an XC90? We don't know, our data is inconsistent.
A better design would handle each candidate key as a separate unique constraint (regardless of which is chosen as primary key). This would prevent the same vehicle registration or engine number from being recorded twice.
DBMSs enforce functional dependencies using uniqueness constraints. A uniqueness constraint on a candidate key means that every dependency on every superkey that includes the candidate key is guaranteed to be satisfied. From a data integrity perspective, therefore, it's important identify the right candidate keys so that you enforce the right superkey dependencies. For example, a uniqueness constraint on a table's attributes {A,B} would enforce superkeys {A,B,C}, {A,B,D}, {A,B,C,D} but not {A,C,D}. Identifying the correct candidate keys relieves the database designer from the need to enforce every superkey separately.
A second reason why it makes sense to identify candidate keys is to ensure data can be used and interpreted accurately by users. Users and consumers of data need to understand facts recorded in a database and relate them to real objects or concepts outside the database. Candidate keys are the identifying attributes that make it possible to perform that mapping from database to reality. If a non-minimal superkey is used to perform such a mapping then there may be a greater possibility of ambiguity and error.
For example, suppose the key of employees in a company database is {EmpNum}. If the user of the database incorrectly thinks the key is {EmpNum, DeptCode} then she might erroneously believe that the following information refers to two different employees, instead of one.
+-------+---------+
|EmpNum |DeptCode |
+-------+---------+
|14972 |SALES |
+-------+---------+
+-------+---------+
|EmpNum |DeptCode |
+-------+---------+
|14972 |HR |
+-------+---------+
In reality, perhaps the single employee 14972 has moved from one department to another. Or maybe this employee truly is assigned to more than one DeptCode simultaneously. Either way, those interpretations depend on the user understanding that only one person is identified by the key EmpNum=14972.
Successful database design requires the designer to identify keys, verify their fitness for purpose and ensure that database users are familiar with what the keys are - at least for important entities that the users need to understand and work with.

Difference between Primary key and Candidate key

I have read about Keys in RDBMS.
https://stackoverflow.com/a/6951124/1647112
I however couldn't understand the need to use a candidate key. If a primary key is all that is needed to uniquely identify a row in a table, why is candidate key required?
Please give a good example as to state the differences and importance of various keys.
Thanks in advance.
A table can have one or more candidate keys - these are keys that uniquely identify a row in the table.
However, only one of these candidate keys can be chosen to be the primary key.
From, the above answer i came to this conclusion
Super key(one or more attributes used for selecting one or more rows)
||
\/
Candidate key(one or more attributes from super used for selecting a single row)
||
\/
Primary key(one attribute among candidate keys used for selecting a single row)
Am i correct?

Relational database theory and keys

I'm designing a schema to hold player data within a browser based game.
I have three relations. Two of them have at least two candidate keys, however the third has only three attributes: {playerId, message, date}
This relation will hold no unique rows as there is a 1..1:0..* relationship, meaning there can be any number of news tuples for each player. I don't need to be able to uniquely identify any tuple and none of the attributes can actually be a candidate, anyway.
My question is: I understand the relational model states there cannot be duplicate tuples and each relation must have a key. My schema above contradicts both of those constraints but works for my purpose. I know I could simply add an index attribute (like an ID) that is unique, but that seems unnecessary. Am I missing something?
Thanks for your time.
I think what you are missing is a composite primary key.
In your case if you are save to get no dublicate entries you want to use a composite primary key.
But think about the same player sends the same message at the same date....
In this case you will have a conflict with a composite primary key.
A virtual unique id as primary key is a saver way.
Tricky question ! I don't have a clear answer, but i think you may run into trouble if you don't have at least a unicity constraint on the whole tuple : imagine some app runs amok and tries to insert 1.000.000.000 times the same tuple in your table...

Superkey vs. Candidate key

What difference between Super and Candidate key in ERDB?
A superkey is a set of columns that uniquely identifies a row. A Candidate key would be a MINIMAL set of columns that uniquely identifies a row. So essentially a Superkey is a Candidate key with extra unnecessary columns in it.
candidate key is a minimal superkey
Candidate key = minimal key to identify a row
Super key = at least as wide as a candidate key
For me, a super key would generally introduce ambiguities over a candidate key
Let's keep it simple
SuperKey - A set of keys that uniquely defines a row.So out of all the attributes if even any single one is unique then all the subsets having that unique attribute falls under superkey.
Candidate Key - A superkey out of which no further subset can be derived which can identify the rows uniquely, Or we can simply say that it is the minimal superkey.
In nutshell: CANDIDATE KEY is a minimal SUPER KEY.
Where Super key is the combination of columns(or attributes) that uniquely identify any record(or tuple) in a relation(table) in RDBMS.
For instance, consider the following dependencies in a table having columns A, B, C and D
(Giving this table just for a quick example so not covering all dependencies that R could have).
Attribute set (Determinant)---Can Identify--->(Dependent)
A-----> AD
B-----> ABCD
C-----> CD
AC----->ACD
AB----->ABCD
ABC----->ABCD
BCD----->ABCD
Now, B, AB, ABC, BCD identifies all columns so those four qualify for the super key.
But, B⊂AB; B⊂ABC; B⊂BCD hence AB, ABC, and BCD disqualified for CANDIDATE KEY as their subsets could identify the relation, so they aren't minimal and hence only B is the candidate key, not the others.