How to Correctly Define Many-To-Many Relationships in Database Design

Поділитися
Вставка
  • Опубліковано 9 лют 2025

КОМЕНТАРІ • 273

  • @DatabaseStar
    @DatabaseStar  2 місяці тому

    Want to improve your database design skills? Get my Database Design project Guides here (diagrams, explanations, and SQL scripts): databasestar.mykajabi.com/lpkj-dbdesign/?

  • @kosnowman
    @kosnowman Рік тому +27

    this channel should be a million-subscriber channel, developers overlooked the importance of the database

    • @DatabaseStar
      @DatabaseStar  Рік тому +1

      Thanks for the support!

    • @federicobau8651
      @federicobau8651 8 місяців тому

      Yes, and most piece of software that need a database also means are database-centric. that is, they are 'data-driven' but despite this, as you said is overlooked and non optimized which is ridiculous. Furthermore, data for most company is probably the single closest thing to their actual 'richness' or 'money' That is, data == money and database == bank from a Company point of view, so see what disaster company do with their money/bank (data/database) is crazy. Once, because of a negligence of some manager in a previous company, and entire database was gone., The guy lost job on the spot and company lost lots of money..

  • @StefanoVerugi
    @StefanoVerugi 3 роки тому +23

    in my opinion this video serves two purposes:
    1 clear and simple explanation for those who need to learn its subject
    2 learn the standard of a high quality video tutorial (for SQL or else), many skilled vbloggers fail at it
    thanks for posting

    • @DatabaseStar
      @DatabaseStar  3 роки тому +5

      Thanks, I'm glad you like the content and the style of video!

  • @jackisbeast10
    @jackisbeast10 4 роки тому +65

    It’s crazy that I just learned more in 3 min than I did in 2 weeks of a lecture

  • @mageKnightz
    @mageKnightz 4 роки тому +63

    Man, this completely saved my day. I was banging my head against this concept until I saw this. Thank you.

    • @DatabaseStar
      @DatabaseStar  4 роки тому +3

      Glad it helped!

    • @markusandrew8360
      @markusandrew8360 3 роки тому

      You prolly dont care but does anybody know a way to get back into an Instagram account?
      I was stupid forgot my account password. I would appreciate any help you can offer me.

    • @Sz-hi7wj
      @Sz-hi7wj 3 роки тому

      @@markusandrew8360 what about the ,,forgot my password" option?

  • @jeffmoden4332
    @jeffmoden4332 3 роки тому +19

    It's not my job to judge but I have to say something on this one. Like Jack Williams said below, a lot of people are going to learn more in this 7 minutes than in 2 weeks of lecture. Your order of revelation was perfect (and a whole lot of even well seasoned instructors get this so very wrong). Your simple yet totally accurate graphics were perfect for the task. Your narrative and tone were perfect. Your CSV example and the mention of how that violates several normal forms was perfect because it expressed the problem without making "normal forms" a distraction from the gist of the presentation.
    This should be "required reading/must watch" for all instructors that want to learn more on the arcane subject of how to make an effective presentation. The title and write up on this video are equally impeccable. Very, very well done Mr. Brumm and truly deserving of the "Database Star" handle.
    If someone asks me about many-to-many joins, junction tables, or just how to solve such a problem, this video is where I'm going to point them to. BOOK MARKED!

    • @DatabaseStar
      @DatabaseStar  3 роки тому +1

      Wow, thanks so much for the comment. I’m glad you found this useful, not just the topic but the video structure overall. I’ll keep this in mind for videos I create in the future. I’m glad it was helpful for you and thanks for sharing it with others!

  • @erf5719
    @erf5719 Рік тому +2

    Its a great example of the greatness of Proper and correct way of lecture.

  • @michaell1787
    @michaell1787 4 роки тому +7

    Thank you for the help. I was stuck with this exact problem and couldn't understand where a certain table came from and then saw they just broke up a many to many relationship. Much appreciated! With distance learning videos like this help out a lot!

  • @mauricemakesmovies
    @mauricemakesmovies 2 роки тому +16

    You have some serious teaching skill. Keep up the great work! Your video's helped me with a current design I'm working on, involving films. Films often have multiple genre's and genre's can of course be associated with multiple films. This video helped me clearly decide to use a joined table. Thank you!

    • @DatabaseStar
      @DatabaseStar  2 роки тому +3

      Thanks so much! Glad you like the video and glad it could help you with your design.

  • @yt-sh
    @yt-sh 5 років тому +24

    This channel is so underrated

  • @kossiviaglee2997
    @kossiviaglee2997 Рік тому +1

    YOU MADE MY DAY WITH THIS VIDEO. THANKS SO MUCH! PLEASE, DO NOT STOP!

  • @aiasaiascon3894
    @aiasaiascon3894 2 місяці тому +1

    I will borrow a great comment - for this great channel - "this channel should be a million-subscriber channel, developers overlooked the importance of the database"

  • @aiasaiascon3894
    @aiasaiascon3894 2 місяці тому +1

    Indeed - it seems that the way Ben explains in combination with his voice makes everything more easily "digestible" pardon me for using this term - fantastic !

    • @DatabaseStar
      @DatabaseStar  2 місяці тому +1

      Thanks, I'm glad you like the videos!

  • @ezekielswanson7813
    @ezekielswanson7813 4 місяці тому

    Finding your channel couldn't have come at a better time. Thank you sharing your knowledge!

  • @AdrianTregoning
    @AdrianTregoning 5 місяців тому +1

    I've watched a few of your videos now. Pure gold! And your PDF's from your website are very useful. Thank you for taking the time and effort to create these.

    • @DatabaseStar
      @DatabaseStar  5 місяців тому

      Thank you so much, I’m glad you like the videos and PDFs. Is there any topic you’d like me to create a video on?

  • @heejunkim9279
    @heejunkim9279 6 місяців тому +1

    This guy should have a lot more credit for his job. Thanks millions!

  • @stingray-q5p
    @stingray-q5p 7 місяців тому +1

    Chief you're THE Database Star. Thanks a ton. God bless you.

  • @Ian_Coast
    @Ian_Coast 4 місяці тому +1

    this channel is my go-to learning tool for data related roles interview prep

  • @sammyattah4653
    @sammyattah4653 2 роки тому

    Best video I have seen on Many to Many relationships. Precise and concise. Thanks a lot.

    • @DatabaseStar
      @DatabaseStar  2 роки тому

      No problem, glad you found it useful!

  • @solis_void
    @solis_void Рік тому +2

    Thanks you, I had a very hard time understanding why the many-many relationships needed a bridge table and your explanation was very helpful.

  • @TomGrubbe
    @TomGrubbe 8 місяців тому +1

    Awesome. This was exactly what I was looking for!

  • @lucasjohn3014
    @lucasjohn3014 4 роки тому +2

    your explanation is so simple and so clear

  • @Nicosfrs
    @Nicosfrs 2 роки тому +1

    Holy, this video is just pure gold

  • @idk5598
    @idk5598 2 роки тому

    can't believe this content is for free .. this is even better than paid stuff

  • @dalskiBo
    @dalskiBo 2 роки тому

    Struggled grasping this until I found your video; thanks.

  • @robertstjohn4906
    @robertstjohn4906 3 роки тому

    Very helpful. The joining table was the kicker for me :) THX!

  • @akira_asahi
    @akira_asahi 2 роки тому

    Thank you for the video. I am grateful for your time and contribution. Kind regards, Akira.

  • @haymondposala4015
    @haymondposala4015 2 роки тому +1

    Awesome! Best explanation on this topic for me. Thanks.

  • @HoshigirlYOO
    @HoshigirlYOO 4 роки тому +4

    Excellent. very clear explanation, liked and subscribed.

    • @DatabaseStar
      @DatabaseStar  4 роки тому

      Glad you like it! And thanks for subscribing!

  • @TheYousufosoly
    @TheYousufosoly 2 роки тому

    Thanks so much. Made understanding this so much easier.

  • @atadjs
    @atadjs 3 роки тому +1

    Oohhh that what my tutor was trying to teach me today. Thanks I now understand

  • @saikiran538
    @saikiran538 2 роки тому

    This is a real good example helped me alot, as I was stuck how to make many-to-many relationship. Thanks greatly appreciated!

  • @kirillzlobin7135
    @kirillzlobin7135 Місяць тому

    The best channel on SQL

  • @mantasgumbelevicius2891
    @mantasgumbelevicius2891 3 роки тому

    Amazing video. It is so simple after watching it. Good luck!

    • @DatabaseStar
      @DatabaseStar  3 роки тому

      Thanks so much. Glad you liked it.

  • @raghav5074
    @raghav5074 3 роки тому +3

    This guy is the DBMS God.

  • @sakinahuzefa1979
    @sakinahuzefa1979 4 роки тому +5

    This was a really good explanation, and it really helped me in my examination, so thank you so much!

  • @mav358
    @mav358 2 роки тому

    very clear and understandable explanation. greetings from germany

  • @numberonetech4990
    @numberonetech4990 Рік тому

    Thank you for your expaination. Helps me to understand the data duplication.

  • @claudiaandaika6778
    @claudiaandaika6778 2 роки тому

    Thank you. Just what I needed

  • @6AM96
    @6AM96 3 роки тому

    Thank you I have an exam coming up and this really helps a lot!

    • @DatabaseStar
      @DatabaseStar  3 роки тому

      Thanks, glad you like it! Good luck for your exam.

  • @YaiseAkuma
    @YaiseAkuma 3 роки тому

    Why tf do teachers ( 5 of my teachers ) not teach this way, thanks for the video life saver

    • @DatabaseStar
      @DatabaseStar  3 роки тому

      Glad you found it useful! Do you have any other topics you’d like to know more about?
      That’s a shame your teachers aren’t helping that much.

  • @budmonk2819
    @budmonk2819 Рік тому

    So much gold !!! Thank you.

  • @abdulahaldhem4511
    @abdulahaldhem4511 3 роки тому

    thanks Ben , your explanation is short and full of details 🌹🌹

  • @Pensive_117
    @Pensive_117 2 роки тому

    This was quite helpful. Thank you :)

  • @praleen_
    @praleen_ 3 роки тому

    🌞 Thank you, it is clear as day and now I understand the concept of Many-to-many! Yayyy!

  • @notril5460
    @notril5460 6 місяців тому

    thank you once again. Learnt a lot from your videos

  • @iluvsyphonfilter
    @iluvsyphonfilter 2 роки тому

    Very good explanation, thanks!

  • @P0cketfull0fsunshine
    @P0cketfull0fsunshine 3 роки тому +1

    Thanks for explaining this way more simply and eloquently than my university materials lol

    • @DatabaseStar
      @DatabaseStar  3 роки тому +1

      No problem, glad it was helpful!

  • @niphomahlangu2733
    @niphomahlangu2733 2 роки тому

    Understood. Thanks for the tutorial.

  • @issarukayat5992
    @issarukayat5992 4 роки тому

    Thank you so much, you make all details so clear and easy to follow

  • @fawzisdudah8511
    @fawzisdudah8511 2 роки тому

    Great video; simple example 👍

  • @pvchio
    @pvchio 4 роки тому +4

    This is very good.

  • @smartygamer2512
    @smartygamer2512 3 роки тому

    Thanks for the video.Love it!

  • @hooyah
    @hooyah 10 місяців тому +1

    Very clear explanation, I just created tables students and classes. and I tried to insert data. and try joining the query where is who is taking class 1 and what classes are taking student 1. thanks 🙏🙏

    • @DatabaseStar
      @DatabaseStar  10 місяців тому

      Thanks! I’m glad it helped.

  • @tomsupis8724
    @tomsupis8724 2 роки тому +1

    Nice video thank you! Just wanted to mention that as someone who would be new to the database. I would prefer the StudentClass table name as it would be easier for me to find it. I have experience working with big database and often I find myself looking at a new table and then trying to find all the relative ones. Lets say if I am looking at Student table, StudentClass would have been the next table that I find, and then Class is already next.

    • @DatabaseStar
      @DatabaseStar  2 роки тому

      Good point! Good to know that you would find that name more helpful.

  • @otavioattuy5394
    @otavioattuy5394 Рік тому

    Great content! Thank you!

  • @HAIDARII
    @HAIDARII 4 роки тому +3

    thank for your sharing

  • @shibinabraham7819
    @shibinabraham7819 11 місяців тому +1

    Thank you for this video. Very nicely explained. Can you please confirm/explain if there is a difference between "Joining Table" or "Look Up Table" or are they the same?

    • @DatabaseStar
      @DatabaseStar  11 місяців тому

      Thanks! Yes there is a difference. A Joining Table is used when there is a many to many relationship and it's for storing the different combinations of records, like in this video. A Lookup Table is to hold a single list of options - think of something like options in a drop-down list on a web page.

  • @LoizidesGeorge
    @LoizidesGeorge 2 роки тому

    Thanks !
    [ fastest way to bring back to my memory data base design I did few decades ago :) ]
    Γ

  • @rizadwiandhika9253
    @rizadwiandhika9253 4 роки тому

    wow ive benn so confusing on designing db with many to many relationship, thank you for the nice explanation

  • @gauravsrivastava17
    @gauravsrivastava17 8 місяців тому +2

    Great

  • @tmjcbs
    @tmjcbs 4 дні тому

    Nice video, but I would have expected some more information about the fact that you can use a composite primary key consisting of both columns in the join-table. With an extra primary key you have to add constraints to both Student and Class ID's.

  • @t33mc
    @t33mc 4 роки тому

    Thank you for this knowledge. I finally get it.

  • @cba2142
    @cba2142 4 роки тому

    it was really nice the explanation abouth the options of using or not the primary key in the student_class. Ty

  • @ayowandeoluwatosin9365
    @ayowandeoluwatosin9365 2 роки тому

    This is awesome. Thank you

  • @miguelnoriega6470
    @miguelnoriega6470 5 років тому +2

    Thanks for the tutorial!

  • @JimRohn-u8c
    @JimRohn-u8c 2 роки тому +1

    So are bridge tables helping join Dimension tables or Fact tables? Are there any books that dive deeper into this?

    • @DatabaseStar
      @DatabaseStar  2 роки тому +2

      Bridge tables are used to join two tables where there is a many to many relationship, in a normalised or "OLTP" database. I don't have as much experience using Fact or Dimension tables, but as far as I know there is a one to many relationship between Fact and Dimension, so there is no need for a bridging table.
      As far as books, I'm not sure. There may be some books on data modelling or database design out there.

  • @sujanbasnet8243
    @sujanbasnet8243 4 роки тому

    Thank you for posting this video

  • @safwan1340
    @safwan1340 4 місяці тому

    Great content sir !

  • @TheSuperHombre
    @TheSuperHombre 4 роки тому

    Nice explanation, thanks.

  • @jesusveliz2150
    @jesusveliz2150 2 роки тому +1

    The explanation is very good, I just have one query, if you just have a list of students and you want to get all the common class of those students...? knowing that in java you don't have the student_class entity

    • @DatabaseStar
      @DatabaseStar  2 роки тому

      Thanks! To get that, you could write a query that selects the class names and a count from the class and student class tables. It could show the classes with the highest count of records in the student class table.

    • @jesusveliz2150
      @jesusveliz2150 2 роки тому

      @@DatabaseStar Of course I understand, but class stdinate table, it is only mapped in the student class, it is not a class as it would be done to consult it in a query with jpa.

  • @levizwannah
    @levizwannah 5 років тому +2

    Very good tutorial....

  • @danielcrompton7818
    @danielcrompton7818 10 місяців тому

    Thanks so much for one of the best Database videos I have ever seen. Thanks for spending the time to make things super explicit through detailed and well-explained examples! I have 1 question though. What do i set as the primary key for my linking table? I am using SQLAlchemy and it requires a primary key on each table. Would it be appropriate to set an index (like 0 1 2 3 4 5...) just to satisfy it, no to use? Thanks in advance!

    • @DatabaseStar
      @DatabaseStar  10 місяців тому

      Thanks, I'm glad you like the video!
      If you need a primary key, I would recommend that you create a new column for the primary key on the linking table. This could be an auto-incrementing number, as you mentioned (the numbers would go 1, 2, 3, 4...)

  • @medilies
    @medilies 5 років тому +4

    Great content

  • @waynefong5960
    @waynefong5960 5 років тому +2

    thanks, it helped my a lot

  • @kanehtube5390
    @kanehtube5390 Рік тому

    Thank you!

  • @joeamadeus9002
    @joeamadeus9002 4 роки тому

    clear explanation!

    • @DatabaseStar
      @DatabaseStar  4 роки тому

      Thanks, glad you like it!

    • @joeamadeus9002
      @joeamadeus9002 4 роки тому

      @@DatabaseStar can I apply this to many-to-many for the same kind of tables.
      For example, student-student (friendship) where multiple students have multiple students as friend.
      Is it best way?

  • @omercelebi2012
    @omercelebi2012 9 місяців тому

    05:10 I don't understand that part. If I set unique const. for table I should do that for each column right? but now we can't assign same class id for other students or vice versa.. How to prevent create duplicate record for both student and class ids?

    • @DatabaseStar
      @DatabaseStar  9 місяців тому

      Good uqestion. We can add a unique constraint for multiple columns in a single constraint, and that's what I am suggesting here. Something like this:
      CONSTRAINT uc_studentclass UNIQUE (student_id, class_id)

  • @ucheobi6382
    @ucheobi6382 4 роки тому

    Thanks...This is so helpful

  • @simiterman
    @simiterman 3 роки тому

    Thank you very much

  • @name1927
    @name1927 Рік тому

    subscribed this channel👍🏻

  • @heppe5931
    @heppe5931 4 роки тому

    Thanks alot for a good video!!

  • @Lonchanick
    @Lonchanick Рік тому

    Hey thanks for your invested time! I have a question, is it necessary to use two foreign keys? Or can I use only the student Id as a foreign key inside the class table? Thanks!

    • @DatabaseStar
      @DatabaseStar  Рік тому +1

      You’re welcome! Yes you would need to use two foreign keys in the joining table so you can capture all of the combinations of student and class. If you just have the student ID in the class table, then you won’t be able to store multiple students for a class.

  • @eyupalakus8543
    @eyupalakus8543 3 роки тому

    Great Video

  • @gripperdotcom5722
    @gripperdotcom5722 Рік тому

    Hi Ben, nice video, thanks. However I do not understand you say in 0:28 "how to avoid it..." I did not get the idea why we should avoid it. I think it is not possible to avoid it or replace many to many relationship. How did you mean it please explain more. You describe only how to use correctly the bridge table and that is it. What I know we could use also composite key. I think many to many is not possible to avoid fully. It is simply such a type of relationship. Each more advanced DB has its relationship and I think there is no point in getting rid of it. Please have mercy on my understanding, maybe i only do not realize the meaning if english word "avoid". thank you.

    • @DatabaseStar
      @DatabaseStar  Рік тому

      Good question! Yes, it's not possible to avoid them - if you have a "many to many" relationship betwen two entities, you'll still have the concept of that relationship after this process. The way that you capture the data for this is by adding this bridge table. This means you can record all of the combinations that you need between the two entities. Hope that answers your question!

  • @ronaldjohnson4470
    @ronaldjohnson4470 5 років тому +1

    Great Channel

  • @ctbrowncoat7147
    @ctbrowncoat7147 3 роки тому +1

    Great video, thanks! How would you write a SELECT statement to get the list of class names one student was taking? For example, at 5:40 looking at your example, it looks like student Claire is taking three classes (DB01, PH01, WEB02). Any advice on what the select statement would look like when a joining table like this is needed to get ? Thanks again!!

    • @DatabaseStar
      @DatabaseStar  3 роки тому +2

      Thanks! Sure, the SELECT statement would select from the class table and use some joins to the student_class and student table. Here's one way to do it:
      SELECT name
      FROM class
      INNER JOIN student_class ON class.id = student_class.class_id
      INNER JOIN student ON student_class.student_id = student_id
      WHERE student.student_id = 4;
      This will show all class names taken by Claire.

    • @ctbrowncoat7147
      @ctbrowncoat7147 3 роки тому

      @@DatabaseStar thanks!!

  • @paula805
    @paula805 4 роки тому +1

    A joining table seems a lot like a fact table in the dimensional modelling paradigm. It's populated mostly with foreign keys and (optionally) some measures. Is it correct to think of a fact table as a joining table then?

    • @DatabaseStar
      @DatabaseStar  4 роки тому

      Yeah that's one way to think of it! They are quite similar as you've pointed tomorrow.

  • @bzaromedia
    @bzaromedia 5 років тому +2

    thanks for this video. I am now wondering 1. Can I set this "Many-to-Many" relationship up in my Oracle 18.4XE DB and 2. How? Obviously, I am totally new to Oracle and setting up and working with DB's.... Help! Also in what order of classes do I need in order to be proficient in this area of IT?

    • @DatabaseStar
      @DatabaseStar  5 років тому

      Yes, you can set it up in Oracle 18 XE (and any other database you happen to use). I would suggest learning about database design first, and then an introduction to Oracle SQL. I have a couple of articles that may help, or you can Google for something you like:
      www.databasestar.com/database-normalization/
      ua-cam.com/video/lzzAXsySxx4/v-deo.html

  • @elijahd.spragueph.d8905
    @elijahd.spragueph.d8905 9 місяців тому

    Could you help me understand why the class ID isn't considered a primary key while the student ID is considered a primary ID? Isn't it all perspective? 4:33

    • @DatabaseStar
      @DatabaseStar  9 місяців тому +1

      I'm not sure why I mentioned here that we don't have a PK on the table on the right (the class table), as earlier in the video it shows the diagram that has a PK on the class table. I think you should have a PK on the class table.

  • @Janith1980
    @Janith1980 4 роки тому +1

    Would you be able to let me know: We could use a composite primary key for the joining table. Hence, a composite primary key would be unique by definition right?
    Thanks
    Michael

    • @DatabaseStar
      @DatabaseStar  4 роки тому

      Hi, yes you can use a composite primary key for the joining table. It works pretty well and you won't have to create a third column for the Primary Key.

  • @Manilck
    @Manilck 3 роки тому

    Thanks!

  • @toucan1462
    @toucan1462 3 роки тому

    Thank you so much omg

  • @jacknoyan9595
    @jacknoyan9595 4 роки тому +1

    Thanks a lot man 🙏 u r awesome
    I have a question if i may,
    Sometimes Database is not as simple as just one relationship,
    For example :
    What if u have a product and that product has multiple color's and every product with a certain color has multiple sizes,
    So in this situation the color table has many-to-many with the product, and the size table has many-to-many
    With the product and color which is confusing, because
    U cant say product-1 has three sizes because the size depends on the color first,
    What i mean by that is in the real world its gonna be like this :
    The PRODUCT-1 with the color RED exists in three sizes
    XL quantity 5
    L quantity 10
    M quantity 7.
    So how is this kinda relationship looks like???
    Im sorry i know its a long question
    But i would really really like to see a video like this because all i could find is just the basics and u cant learn much out of that

    • @DatabaseStar
      @DatabaseStar  4 роки тому +1

      Great question! I would imagine the product table would have a column called size and a column called colour. The size column in the product table could actually be size_id, which refers to the id in the size table. Same for colour - colour_id in the product table refers to the ID in the colour table.
      You could then have an entry in the product table for each combination of size and colour. But then you would have duplicate products. So perhaps you need a table that captures the combinations of size, product, and colour.
      I can create a video on this to better explain it!

    • @jacknoyan9595
      @jacknoyan9595 4 роки тому

      @@DatabaseStar yes thats exactly what im strugling to understand because if i wanna follow the normalization rules redundancy is a bad design
      And thank you man for considering making a video 🙏

    • @shegerians
      @shegerians 3 роки тому

      @@jacknoyan9595 Is the video available?

    • @jacknoyan9595
      @jacknoyan9595 3 роки тому +1

      @@shegerians no it never came out

  • @pampofski8751
    @pampofski8751 Рік тому

    3:19 what software is being used here?

  • @servantofgod9679
    @servantofgod9679 4 роки тому

    thank you, GOD BLESS

  • @dooham1383
    @dooham1383 3 роки тому

    Can you elaborate on the the relationship between the entities...like what crow's foot notation you would put between each entity and why. Thank you!

    • @DatabaseStar
      @DatabaseStar  3 роки тому

      Sure! I believe they would both have "one to many" relationships, where the "many" side (the one with the three lines) goes on the joining table in the middle, and the "one" side goes on the other tables.

  • @ahmettachmuradov8630
    @ahmettachmuradov8630 4 роки тому

    thank you

  • @Pages_Perfected
    @Pages_Perfected 3 роки тому

    you are super good

  • @chevxphone1126
    @chevxphone1126 4 роки тому +2

    What do you prefer? Daaaataaaa or Dayyyta?

    • @DatabaseStar
      @DatabaseStar  4 роки тому

      Personally I prefer "daataa" but that could be my Australian accent :)