Book table:
book id : 1, name: some book name

Author table
Author id: 1, name: author 1
Author id: 2, name: author 2


Rel_author_book table:
Book id: 1, author id: 1
Book id: 1, author id: 2

Same with categories and other 1:N relations


Olaf



On 2/9/09 2:01 PM, "PJ" <af.gour...@videotron.ca> wrote:

> Peter Brawley wrote:
>> PJ
>> 
>>> Why do I need a third table?
>> 
>> The clue is "author (could be 2 or more)" in your books column list.
>> It is incorrect to store two author names or IDs in one column. The
>> relationship is 1:many. So you need a bridge table:
>> 
>> books(id PK, etc...)
>> authors(id PK, etc...)
>> books_authors(id PK, bid references books(id),...,aid references
>> authors(id), listed_order smallint, etc...)
>> 
>> Now one book with multiple authors has one books_authors row for each
>> of its authors, and you retrieve book & author info with a simple join.
> I did review normalization - I had read it before; it is a little
> clearer now, but....
> so, now I'm getting very very confused...
> As I understand it,  I have one table "books" it lists all the info for
> the book other than the author(s) or the categories ; for these I need
> an authors table and a category table... I'll continue with the authors
> as categories will surely be the same thing. BTW, I cannot use ISBN as
> PK since there are books without ISBN that are older than ISBN itself.
> So, there is no author or category field in the books table, right?
> Are you saying that the id PK of books, authors and books_authors are
> all the same?
> The "authors" table would have the fields auth_id, first_name, last_name.
> The "books_authors" table would have its own fields - id PK, bid, aid
> and listed_order (which would indicate iin which order to display the
> authors (?))
> Where things go awry is in how to keep track of all this? Especially,
> when I have to enter the information in the main table, which is books.
> Every time I have a new listing I have to enter the main book info in
> the books table, the authors in the authors table and the rest in
> books_authors table... not to mention the categories - I don't suppose
> there is a simple solution to this?
> From the looks of things I have to create some kind of php input
> function or group of functions to come up with a page with the fields
> necessary to enter all the data and then store the data in mySql. And to
> retrieve the information its a heap of functions to gather and populate
> a page with the info from mySql...
>> 
>> PB
>> 
>> -----
>> 
>> PJ wrote:
>>> Olaf Stein wrote:
>>>  
>>>> Just about the authors
>>>> 
>>>> You need a separate table for them and then an table linking authors
>>>> and
>>>> books.
>>>> 
>>>>       
>>> You lose me here... :-(
>>> Why do I need a third table?
>>> I may have 2 or three books with 3 authors, quite a few with 2 authors
>>> and many with just 1 author.
>>> I can't see creating an extra table for every book that has more than 1
>>> author... ? ? ? ?
>>> And wouldn't it be the same thing for the categories?
>>> Isn't the relationship between the author field in the books table and
>>> the authors table done by an foreign key?
>>>  
>>>> So you have table books, authors and rel_books_authors where rel_books
>>>> authors has 3 entries for a book with 3 authors just using the book
>>>> id and
>>>> the author is's
>>>> 
>>>> Olaf
>>>> 
>>>> 
>>>> On 2/9/09 10:25 AM, "PJ" <af.gour...@videotron.ca> wrote:
>>>> 
>>>>      
>>>>> being a newbie to mysql, I'm a little confused about how to deal with
>>>>> the following:
>>>>> I am creating a database of books and have come down to this -
>>>>> table for
>>>>> books (books) including fields for
>>>>> id (primary key, auto-incr.)
>>>>> title
>>>>> author (could be 2 or more)
>>>>> category (could be several - eg. youth, fiction, comics, and history,
>>>>> for same book)
>>>>> lang (eng, french, spanish, or german)
>>>>> descr (short summary, if avail.)
>>>>> comment (review(s))
>>>>> publisher
>>>>> pub_link (publisher's web addr. if avail.)
>>>>> bk_cover (image, if avail.)
>>>>> publish_date
>>>>> ISBN
>>>>> buy_link (if avail.)
>>>>> 
>>>>> The other tables would be authors, categories, and buy_links.
>>>>> 
>>>>> My problem is how to deal with several authors, categories, and
>>>>> links to
>>>>> sellers.
>>>>> What do I enter in the author field when I have several authors? Do I
>>>>> set up references to the author's name(s) in another table, like
>>>>> (3, 7,
>>>>> 23) each number representing the name of an author in another table?
>>>>> That is, .e.g. a number_id is entered in the author field in the books
>>>>> table; in the author table, I enter John Smith in the author_id
>>>>> field in
>>>>> the author table? Is the field for the author_id a foreign key?
>>>>> Same question for categories...
>>>>> buy_link - there are not many, but generally include an image and
>>>>> related info to be shown next to the books info (here, I suppose,
>>>>> just a
>>>>> few numbers will suffice to reference the table containing the
>>>>> information) and this field (buy_link_id) would be a foreign key (?)
>>>>> referencing the buy_link table?
>>>>> So, in a query (search) I would be doing joins from the books table to
>>>>> the author, category, and buy_link tables using foreign keys?
>>>>> 
>>>>> But how do I deal with a search for a book by author? If there are,
>>>>> say,
>>>>> 3 authors (Red, White, and Blue) and the search is for White, the
>>>>> display should probably be formulated with a php function to
>>>>> display the
>>>>> book listing by book title (the standard display which includes all
>>>>> the
>>>>> relevant information about the book). So the search should first find
>>>>> the name of the author in the authors table and if it exists, then the
>>>>> author_id should reveal the ids for the relevant books and then these
>>>>> should be printed (or echoed) in the output. Gets kind of complicated
>>>>> doesn't it?
>>>>> 
>>>>> Or would it all be simpler to just enter all the authors' names in the
>>>>> author field and then do a search for an author within the fields as a
>>>>> string? I suspect this would be rather slow. Also, same for categories
>>>>> and sellers since the whole database has to be searched?
>>>>> 
>>>>> Am I on the right track? TIA
>>>>> 
>>>>>           
>>>> 
>>>> ----------------------------------------- Confidentiality Notice:
>>>> The following mail message, including any attachments, is for the
>>>> sole use of the intended recipient(s) and may contain confidential
>>>> and privileged information. The recipient is responsible to
>>>> maintain the confidentiality of this information and to use the
>>>> information only for authorized purposes. If you are not the
>>>> intended recipient (or authorized to receive information for the
>>>> intended recipient), you are hereby notified that any review, use,
>>>> disclosure, distribution, copying, printing, or action taken in
>>>> reliance on the contents of this e-mail is strictly prohibited. If
>>>> you have received this communication in error, please notify us
>>>> immediately by reply e-mail and destroy all copies of the original
>>>> message. Thank you.
>>>> 
>>>>       
>>> 
>>> 
>>>  
>>> ------------------------------------------------------------------------
>>> 
>>> 
>>> Internal Virus Database is out of date.
>>> Checked by AVG - http://www.avg.com Version: 8.0.176 / Virus
>>> Database: 270.10.12/1909 - Release Date: 1/22/2009 7:08 AM
>>> 
>>>   
>> 
> 





-------------------------
Olaf Stein
DBA
Battelle Center for Mathematical Medicine
Nationwide Children's Hospital, The Research Institute
700 Children's Drive
43205 Columbus, OH
phone: 1-614-355-5685
cell: 1-614-843-0432
email: olaf.st...@nationwidechildrens.org


³I consider that the golden rule requires that if I like a program I must
share it with other people who like it.²
Richard M. Stallman


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to