On May 20, 12:53 pm, Mk 27 <[email protected]> wrote: > Please bear with me as I am totally new to Rails AND sql. > > Let's say a want a database & application for a record collection (using > sql and rails). If I want the database to contain information down to > the length of a song, how can I implement this using the class = table > model?
Very easily. Read on. > > For example, the way I have the db now, ignoring rails, is a table "of > Contents" listing all artists (one column). Each artist then has a > table listing all their albums, So you're saying you have table: Contents +-------------------+ | name | +-------------------+ | Michael Jackson | | Bruce Springsteen | table: Michael Jackson +----------+ | album | +----------+ | Thriller | table: Bruce Springsteen +--------------------+ | album | +--------------------+ | Working on a Dream | ? If that's what you're saying, then this is poor database design, with or without Rails. > several columns since we want the total > length of the album and (since this is a digital catalog) a location > where the actual album is stored. Then we need a table for each album > listing each song, with the length. No we don't. Keep reading. > > Going with the class=table model, that means I will be stuck with a > separate class for every single artist and album, which is beyond > ridiculous if not completely unworkable. But if I organize the material > differently -- eg, a table "artist" with a column "albums" (fine, if > they were just objects) some single table cell would have to contain a > list of all the albums. Slightly awkward, since each album will then > have to be parsed out of a string of albums, but more realistic. Still no. Please learn about the proper use of foreign keys and the Third Normal Form. > Then I > would have a table "albums" with columns/methods "artist" and "songs". > But when it comes down to including the length of each song, this > methodology is gonna get dunder-headed. > > The former model makes much more sense anyway, from any perspective > *except* it would appear to be unworkable with rails. Clearly I am > missing something here, I hope. Anyone want to offer me a clue? The former model actually make *no* sense, since it contains lots of tables with identical structure. That's your cue to realize that they should be one table. What you want instead is something like this: table: artists +----+-------------------+ | id | name | +----+-------------------+ | 1 | Michael Jackson | | 2 | Bruce Springsteen | table: albums +----+--------------------+-----------+ | id | name | artist_id | +----+--------------------+-----------+ | 1 | Working on a Dream | 2 | | 2 | Thriller | 1 | table: songs +----+--------------+----------+ | id | name | album_id | +----+--------------+----------+ | 1 | Beat It | 2 | | 2 | Thriller | 2 | | 3 | Outlaw Pete | 1 | | 4 | My Lucky Day | 1 | Then use has_many and belongs_to properly and Rails will deal with creating the object graph. Does that make more sense? Best, -- Marnen Laibow-Koser [email protected] http://www.marnen.org > -- > Posted viahttp://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---

