===== CS 325 - Week 10 Lecture 1 - 2021-10-25 ===== ===== TODAY WE WILL ===== * announcements * converting an E-R model into a relational design/schema * prep for next class * reading for this week: * DB Reading Packet 7 - Database Design, Part 1 * SQL Reading Packet 6 - "Set-theoretic operations, more on modifying data, intro to sequences" * you should be starting Homework 7 - final versions of its problems are due 11:59 pm on FRIDAY * be sure to read DB Reading Packets 7 and 8 - Database Design, Parts 1 and 2 before you start to convert your Project Model draft into relations! ======= CONVERTING an E-R MODEL into a RELATIONAL schema, a relational database design! ======= * how shall we depict a resulting relational schema/design? * reminder: a schema/design consists of: * relations * relationships * domains * business rules * relation-structure form is convenient, but it does not include domains of the attributes; we'll still use it informally/for homework design problems/ to make a useful reference for writing queries * create-table form is nice for also including domains! (and being very close to executable...) ===== my suggested step 1: use each entity class to create your first initial "base" tables (more will VERY likely be added later!) ===== * give the "base" table for each entity class a SQL-friendly name Painter( Painting( Gallery( Art_period( Donor( Curator( ===== hey, make sure to give each of the "base" tables a suitable primary key ===== * if you add an attribute to be a "better" primary key, you DON'T have to add that to the E-R model -- this is not a model correction, it is part of conversion to a design Painter(PTR_NUM, Ptr_lname, Painting(PTG_NUM, Gallery(GAL_NUM, Art_period(PD_CODE, Donor(DON_NUM, Curator(CUR_NUM, ===== then could add in the remaining attributes from the model into the design ===== * IF single-valued attributes, might as well add them to the "base" table for the entity class they are in; BUT what if they are multi-valued? AH! You create a NEW table for EACH multi-valued attribute, * it has a suitable name that is descriptive but NOT exactly the same as an attribute name, please! * its primary key of the new table is the COMBINATION of the primary key of the entity class' "base" table and the AND the multi-valued attribute * and the primary key of the "base" table that is in this new table should also be a foreign key referencing the "base" table Painter(PTR_NUM, Ptr_lname, Ptr_fname, Ptr_dob, Ptr_dod Painting(PTG_NUM, Ptg_title, Ptg_cost, Ptg_acquis_date Gallery(GAL_NUM, Gal_street_addr, Gal_name Art_period(PD_CODE, Pd_name, Pd_begin, Pd_end Donor(DON_NUM, Don_lname, Don_fname, Don_street_addr, Don_city, Don_state, Don_zip Donor_email(DON_NUM, DON_EMAIL) foreign key (don_num) references Donor Curator(CUR_NUM, Cur_lname, Cur_email Curator_Phone(CUR_NUM, CUR_PHONE) foreign key (cur_num) references Curator Curator_Certif(CUR_NUM, CUR_CERTIFICATION) foreign key (cur_num) references Curator ======= NOW!!! handle RELATIONSHIPS! ======= * EACH relationship line in your model results in an addition to your design!!!!!!!!!!!!!!! * for each 1:N relationship: * the primary of the "base" table of the entity class on the "1" side of the relationship -- often also called the parent is added to the "base" table of the entity class on the "N" side of the relationship -- often called the child * for each N:M relationship: * you add an INTERSECTION TABLE for each N:M relationship, they have the primary key of EACH entity class' "base" table, BOTH, together, make up the primary key of the new table, and EACH is a foreign key referencing its entity class' "base" table * for each 1:1 relationship: ...special case of 1:N, see Week 10 Asynchronous Material and of course the DB Reading Packet 7 ...I'll finish this example in the Week 10 Asynchronous Material SO: where we'll START in Week 10 Asynchronous Material: ===== Painter(PTR_NUM, Ptr_lname, Ptr_fname, Ptr_dob, Ptr_dod Painting(PTG_NUM, Ptg_title, Ptg_cost, Ptg_acquis_date Gallery(GAL_NUM, Gal_street_addr, Gal_name Art_period(PD_CODE, Pd_name, Pd_begin, Pd_end Donor(DON_NUM, Don_lname, Don_fname, Don_street_addr, Don_city, Don_state, Don_zip Donor_email(DON_NUM, DON_EMAIL) foreign key (don_num) references Donor Curator(CUR_NUM, Cur_lname, Cur_email Curator_Phone(CUR_NUM, CUR_PHONE) foreign key (cur_num) references Curator Curator_Certif(CUR_NUM, CUR_CERTIFICATION) foreign key (cur_num) references Curator