What are Relationships, Foreign Keys and Normalization

MySQL Database Development Mastery Relationships and Foreign Keys
10 minutes
Share the link to this page
Copied
  Completed
You need to have access to the item to view this lesson.
One-time Fee
$69.99
List Price:  $99.99
You save:  $30
€67.23
List Price:  €96.05
You save:  €28.81
£54.79
List Price:  £78.28
You save:  £23.48
CA$100.29
List Price:  CA$143.28
You save:  CA$42.98
A$112.09
List Price:  A$160.13
You save:  A$48.04
S$94.52
List Price:  S$135.03
You save:  S$40.51
HK$543.88
List Price:  HK$777
You save:  HK$233.12
CHF 61.94
List Price:  CHF 88.49
You save:  CHF 26.55
NOK kr788.73
List Price:  NOK kr1,126.80
You save:  NOK kr338.07
DKK kr502.03
List Price:  DKK kr717.22
You save:  DKK kr215.19
NZ$123.81
List Price:  NZ$176.87
You save:  NZ$53.06
د.إ257.07
List Price:  د.إ367.26
You save:  د.إ110.18
৳8,350.53
List Price:  ৳11,929.84
You save:  ৳3,579.31
₹5,977
List Price:  ₹8,538.94
You save:  ₹2,561.93
RM314.04
List Price:  RM448.65
You save:  RM134.61
₦108,176.53
List Price:  ₦154,544.52
You save:  ₦46,367.99
₨19,454.09
List Price:  ₨27,792.76
You save:  ₨8,338.66
฿2,391.55
List Price:  ฿3,416.65
You save:  ฿1,025.10
₺2,463.31
List Price:  ₺3,519.17
You save:  ₺1,055.85
B$446.27
List Price:  B$637.56
You save:  B$191.28
R1,312.34
List Price:  R1,874.85
You save:  R562.51
Лв131.59
List Price:  Лв188
You save:  Лв56.40
₩101,993.60
List Price:  ₩145,711.39
You save:  ₩43,717.78
₪255.42
List Price:  ₪364.90
You save:  ₪109.48
₱4,105.61
List Price:  ₱5,865.41
You save:  ₱1,759.80
¥11,000.67
List Price:  ¥15,715.92
You save:  ¥4,715.24
MX$1,411.29
List Price:  MX$2,016.21
You save:  MX$604.92
QR254.14
List Price:  QR363.08
You save:  QR108.93
P970.50
List Price:  P1,386.50
You save:  P415.99
KSh9,031.50
List Price:  KSh12,902.70
You save:  KSh3,871.20
E£3,557.88
List Price:  E£5,082.90
You save:  E£1,525.02
ብር8,897.26
List Price:  ብር12,710.92
You save:  ብር3,813.65
Kz63,830.88
List Price:  Kz91,190.88
You save:  Kz27,360
CLP$69,240.40
List Price:  CLP$98,919.10
You save:  CLP$29,678.70
CN¥510.85
List Price:  CN¥729.82
You save:  CN¥218.97
RD$4,256.60
List Price:  RD$6,081.12
You save:  RD$1,824.52
DA9,455.74
List Price:  DA13,508.78
You save:  DA4,053.03
FJ$162.28
List Price:  FJ$231.84
You save:  FJ$69.55
Q538.26
List Price:  Q768.97
You save:  Q230.71
GY$14,619.81
List Price:  GY$20,886.35
You save:  GY$6,266.53
ISK kr9,767.10
List Price:  ISK kr13,953.60
You save:  ISK kr4,186.50
DH704.68
List Price:  DH1,006.73
You save:  DH302.05
L1,289.28
List Price:  L1,841.91
You save:  L552.62
ден4,135.94
List Price:  ден5,908.74
You save:  ден1,772.79
MOP$559.01
List Price:  MOP$798.63
You save:  MOP$239.61
N$1,299.34
List Price:  N$1,856.28
You save:  N$556.93
C$2,571.30
List Price:  C$3,673.45
You save:  C$1,102.14
रु9,517.06
List Price:  रु13,596.38
You save:  रु4,079.32
S/260.20
List Price:  S/371.74
You save:  S/111.53
K283.61
List Price:  K405.18
You save:  K121.56
SAR262.82
List Price:  SAR375.47
You save:  SAR112.65
ZK1,933.89
List Price:  ZK2,762.82
You save:  ZK828.92
L334.85
List Price:  L478.38
You save:  L143.52
Kč1,692.49
List Price:  Kč2,417.95
You save:  Kč725.45
Ft27,633.93
List Price:  Ft39,478.73
You save:  Ft11,844.80
SEK kr761.65
List Price:  SEK kr1,088.11
You save:  SEK kr326.46
ARS$71,885.87
List Price:  ARS$102,698.50
You save:  ARS$30,812.63
Bs482.86
List Price:  Bs689.84
You save:  Bs206.97
COP$308,852.42
List Price:  COP$441,236.66
You save:  COP$132,384.23
₡35,480.70
List Price:  ₡50,688.88
You save:  ₡15,208.18
L1,775.44
List Price:  L2,536.46
You save:  L761.01
₲544,980.94
List Price:  ₲778,577.57
You save:  ₲233,596.63
$U3,110.44
List Price:  $U4,443.67
You save:  $U1,333.23
zł286.56
List Price:  zł409.39
You save:  zł122.83
Already have an account? Log In

Transcript

Hey guys, in this video, we will start looking at relational database design as it relates to relationships, foreign keys, and overall normalization. Now on the screen, you'll see a database that I developed some time in the past. And you would see that we have an entity relationship diagram, as well as a bunch of lines that depict relationships. Now, the database being depicted here is really an occluding database for an Instagram application. And you'll see that I have here the main table being users because without users there would be pretty much no Instagram. And then from the users table, you'll notice that there are a bunch of lines highlighted when I hover over that entity.

Alright, so each of those lines depict relationships and what you would call dependencies, that users are other tables. Have on the data found in the users table. Now before I start dissecting the databases design, I would like for us to discuss shortly what normalization is. Now simply put normalization is a process by which you eliminate redundancies and repetitions in your database. Now, of course, you would probably ask, okay, what would be redundancy or petition. And let's just take this database here that we have on screen and look at an example of photos.

Now, if anybody watching this video has ever used Instagram, then you would know that a photo has to be posted by a user. All right, and then a user can have many photos. Now we see here that you have a database for the users and the user would have signed up, they put in their username and their password and their email address and so on. And this is a rather scaled down version of that, but we can work with it for now. So a user would have put in their username and we would have taken that time. stomp off when this user created their account.

And then having registered, this user can go ahead and start posting one or many pictures. And the pictures or photos will be stored in this database where we store a URL, because instead of storing the actual image, we're just storing a path to the image that we've just, you know, pulled back when we're displaying it on the application. And you would notice that this row here or this entry here in this entity, user underscore ID has a kind of red thing beside it. And that's what is usually used to depict dependencies dependency or a foreign key. No, the scenario would be that every time somebody posts a picture that you would say, okay, new picture with a new ID, you would post the image URL, and then let's say my username would be t Williams then you would say t Williams added I posted another one then you have T Williams, and then you have a bunch of T Williams is and then If there's something wrong with the code, maybe it will be t Williams up top, and then t Williams one below, and then something could go wrong and the whole text t Williams would become kind of tedious to maintain.

All right. And so we we want a clean way to associate a photo being associated with a user. And then that is where normalization comes in. Because when you realize that in associating records in one table with a record in another table kind of gets messy because maybe you're repeating unnecessary data, or maybe after three, four times the data seems unnecessary to repeat, then you would normalize this database by taking all this seemingly repeating data or potentially repeating data, putting it in its own table with its own primary key and its own table, and then you just reference that primary key where necessary. So in college text, what do we have a user posting a picture instead of repeating the user's username every time because something could go wrong, and its string will just reference their ID. So when I, maybe I was the first person to ever sign up for Instagram, my ID would be user ID one, when I posted my first picture, it would be user photo ID one with user ID one.

Alright. And then I maybe post a picture, you know, down the line, and it's a 200 feature on Instagram, then the photo ID would be photo ID one, and then the user ID is still on. So if I look in photos for all of the pictures posted by me, I can just say give me back all photos where user ID I went through SELECT statements with our conditions on so on. So I could just say give me about select our Select star from photos where user onto Score ID is equal to one. And that will match back all of the users from this table with user ID one and as much them here and bring back all of the features for user ID one. All right.

So that's a nice, clean and easy way for us to just maintain this referential integrity. And I spoke about data integrity before in this course, that is basically just maintaining that your data is clean, and your data makes it easy for you to associate and navigate across different tables. So in doing normalization, essentially, what you're doing is establishing foreign keys between tables. Because when you abstract the user information from your photos table, or maybe the photos information from the users table, because maybe your design initially had you trying to associate the photo with the the user in the same table, then you realize that you have to be repeating the user name in the users table when Your users table should really only have one instance of a user. So then what you would do is extract all the repeating filter information and put it in its own table.

So in the process of normalization, you know, it's kind of a break fix cycle, you get it right. You may get it wrong initially, and then you correct it later on. But then, for the remainder of this section, I'll just be showing you how you can go about doing it right the first time to reduce that break, fix cycle and that repetition, procedure process. If you if you read up on normalization online, you'll see a number of scholarly documents talking about the first normal form and the second normal form. And that's really useful for when you get to initially badly designed database but then as the designer, I put the onus on you or the responsibility on you to just do it right the first time. So if we take a closer look at the other tables here, We see that we have lines that depict which table is related to which and in the context of my SQL er D representation, you notice that you have kind of dotted lines versus solid lines.

So the solid line means that the ID or the foreign keys not is not optional in the related table, whereas the dotted line means it may not be necessary. So as the designer, you can set that up. So I can tell you right now that this was poorly designed, because I'm here seeing that photo can exist without the user. And that's wrong, because the foreign key from the user table to the full dose table is user ID. And then if you hover over the line, it will show you what the primary key is on one side and the foreign keys on the other side. And then the dotted line means that the foreign key might be empty, which is wrong because Instagram really should not have an image unless it has a user to associate with this image.

So that's wrong. However, on the other side between users and likes, if you hover over that solid line, then you'll see that the user ID on the likes side is the foreign key, which is associated with the ID in the user stable. And it's solid because you can have somebody liking something without a user. Well, you can't have a life without a user. And in the same way, I like only applies for photo. So we have likes being associated with photos.

And then this is what you call a link or table because it is storing two foreign keys. It has no primary key for itself what it is saying that this user depicted by user ID here, like this photo, so it is it is storing the foreign key for the user table and the foreign key for the full table. So in a nutshell, that's what a foreign key does the foreign keys pretty much just storing the value of a primary key from another table and then That brings up another thing when it relates to integrity because you can't or shouldn't, under any circumstance have a foreign key in a table that does not match back to a primary key in another table. All right, so you can have use it, you can't have 10 users in the user table numbered one through 10. And then have user number 11.

Liking photo number 250, when there are only 200 photos and 10 users, right. So that's another aspect of the foreign keys where the values of the foreign keys must match back to the value was in whatever primary key column is being referenced in the other table. And finally, once you establish that foreign key presence in another table, then you would have created what is called a relationship. So just by creating this foreign key for user ID here and user ID here. And if I hover over users, you'll see All of those highlighted lines, those are all the tables that depend on the primary key values stored in the users table, just by setting up that foreign key user underscore ID in any other table, then you would have established what we call a relationship. So for the remainder of this section, we will be going through modifying an existing table and adding foreign keys because for our school dB, we would have had multiple tables.

And I'm sure just by looking at it, you'd be wondering, how do we associate the teachers with the students and also we will be looking at doing that using the regular editor view versus the model design and creation view. So stick around exciting times are ahead

Sign Up

Share

Share with friends, get 20% off
Invite your friends to LearnDesk learning marketplace. For each purchase they make, you get 20% off (upto $10) on your next purchase.