=====
CS 325 - Week 5 Asyvnchronous Material
=====

=====
"TODAY" WE WILL
=====
*   announcements
*   continue - intro to E-R modeling, part 1
*   SQL - more clauses for the select statement's where clause
*   SQL - column and table aliases
*   SQL - projecting computed columns and aggregate functions
*   prep for next class

-----
ANNOUNCEMENTS
-----
*   Reading for this week:
    *   DB Reading Packet 4 - intro to E-R modeling, part 1
    *   SQL Reading Packet 3 - more where clause options and aggregate
        functions (and more...)

*   You should be working on Homework 3! Due this FRIDAY at 11:59 pm

=====
CONTINUING our INTRO to E-R modeling!
=====
*   our development approach is:
    *   FIRST: develop an E-R model of a scenario/setting
    
    *   ONLY AFTER THAT: convert that model into an appropriate
        database design (that includes appropriate tables!)

*   One definition of a database design (Kroenke):
    *   a database design (or database schema) defines a database' structure:
        *   its tables,
	*   relationships,
	*   domains, and
	*   business rules

*   Key elements in an E-R model (Kroenke):
    *   entities,
    *   attributes,
    *   identifiers, and
    *   relationships

*   we discussed entities (entity classes and entity instances) on
    Monday;
    *   and we started talking about attributes;

=====
a bit MORE about attributes in the E-R model
=====
*   reminder: attributes are properties or characteristics of entity
    instances of an entity class that users in that scenario care about;

    *   attributes have domains - the set of permitted values for
        that attribute;

    *   an attribute for a single entity instance may be multi-valued
        or single-valued

    *   CS 325 class style:
        *    to give the attributes of an entity class as a vertical
	     "list" on or near the E-R model diagram

             Painting
	     --------
	     Ptg_title
	     Ptg_date_purchased

        *    attributes are assumed to be single-valued unless
	     (MV) is written next to them in this list

             Employee
	     --------
	     Empl_lname
	     Empl_email (MV)
	     Empl_salary

=====
IDENTIFIERS
=====
*   how do people in a scenario tell instances of an entity class apart?
    ...at the modeling level, the attributes they use for that
       are called identifiers

    *   SOME ENTITY CLASSES DO NOT HAVE IDENTIFIER ATTRIBUTES.
        (we'll talk about why this can be useful later!)

    *   NOT necessarily primary keys! Because at the model stage,
        entity classes ARE NOT RELATIONS

        (each entity class will EVENTUALLY be turned into ONE OR MORE
	relations IN a database design LATER!!!!!!!)

    *   BUT we do like to indicate these identifying attributes (when they
        exist) in our models,
	and CS 325 CLASS STANDARD will be to write these identifying
	attribute names in ALL-UPPERCASE

             Painting
	     --------
	     PTG_TITLE
	     Ptg_date_purchased

             Employee
	     --------
	     EMPL_LNAME
	     Empl_email (MV)
	     Empl_salary

=====
RELATIONSHIPS
=====
*   the R in the E-R model!!!!!

*   a relationship class is an association that can be between
    entity classes (and is significant in the users' scenario)

    a relationship instance is an association that can be between
    entity instances

    *   a Customer might be able to have an Account;

        Customer Harris has Account 23657

*   in the E-R model, we want to give a name describing each
    relationship;

    *   might be "verb"-y, describing the nature of the relationship;
    *   might be a combo of the names of the entity classes involved;
    *   might be a combo of the above...!

*   How can you indicate a relationship in an E-R diagram
    depicting an E-R model?
    *   it is pretty typical to draw a LINE between entity class
        rectangles to indicate a relationship within an E-R model;

    *   CS 325 Class Standard:
        to draw a line with a DIAMOND between the two related entity
	    classes,
	and we'll LABEL that diamond (on or near that diamond,
	    either is fine) with its descriptive name

        *   it is NOT required that the name be reasonably-readable
	    in BOTH directions!

=====
*   DEGREE of a relationship
=====
*   the number of entities involved in that relationship

    a relationship of degree 2, or a binary relationship,
    is between TWO entities;

    *   if a relationship being modeled is of degree more than two,
        we will "break" that into 2 or more binary relationships;

        (possibly adding small entity classes to make this work
	and to possibly be where characteristics of such a relationship
	would be placed;)

=====
MODELING can be ... an INTERESTING process!
=====
*   it CAN be tricky sometimes to distinguish between attributes
    and entity classes!

*   it CAN be tricky to distinguish between attributes and relationships
    between entity classes!

    *   remember: the attributes in an E-R MODEL should be characteristics
        of ONE instance of that entity class --
	be careful that you don't treat a relationship as an attribute

        *   avoid "burying" a relationship in your attributes...

        ********************
        *   LINES are used to indicate relationships between entity
	    classes at the modeling stage!!!!!!!!!!!!!
        ********************

======
CARDINALITIES of relationships
=====
*   maximum cardinalities
*   minimum cardinalities

*   maximum cardinalities:
    *   for a given relationship, for an entity instance in one of the
        entity classes involved, HOW MANY instances of the OTHER class
	CAN this entity instance be related to (in this relationship)?

    *   the numbers we really care about:
        One or Many!
	1 or (N or M)

    *   the 4 possible maximujm cardinality possibilities we care about:
        1:1 - one-to-one
	1:N  (some people also include N:1) - one-to-many (sometimes also
	                                      many-to-one)
	N:M - many-to-many

    *   1:1 - in a relationship R between entity class A and entity class
              B, R has a maximum cardinality of 1:1 if
	      *   an entity instance in A can be related to AT MOST
	          one entity instance in B,
              AND
	      *   an entity instance in B can be related to AT MOST
	          one entity instance in A
  
        *   not all that common, actually!

    *   1:N - in a relationship R between entity class A and entity class
              B, R has a maximum cardinality of 1:N if
	      *   an entity instance in A can be related to MORE THAN 
	          ONE entity instance in B,
              BUT
	      *   an entity instance in B can be related to AT MOST
	          one entity instance in A

        *   REALLY common! (arguably the MOST common) in most scenarios;

    *   N:M - in a relationship R between entity class A and entity class
              B, R has a maximum cardinality of N:M if
	      *   an entity instance in A can be related to MORE THAN 
	          ONE entity instance in B,
              AND
	      *   an entity instance in B can be related to MORE THAN 
	          ONE entity instance in A

        *    more common than 1:1, less common (usually) than 1:N

*   THIS IS IMPORTANT to NOTE in an E-R MODEL!
    (REALLY affects the tables in the eventual design!)

    *   SO many different ways to SHOW this!
    *   CS 325 Class Standard:
        *   put a 1 or M or N NEAR the relationship line NEAR the
	    entity class rectangle involved;

        *   but you read these "across" the relationship line;

    |------------| 1     primary-teacher-of    N |--------|
    | Instructor |-------------/\----------------| Course |
    |------------|             \/                |--------|

            *   this means an instructor instance can be the primary-teacher-of
	        MORE than one course,

                BUT a course instance can only have ONE instructor instance
		who is its primary-teacher;

    *   this is what these instances CAN have;

========
MINIMUM CARDINALITIES
========
*   minimum cardinalities
    *   for a given relationship, for an entity instance in one of the
        entity classes involved, HOW MANY instances of the OTHER class
	MUST this entity instance be related to (in this relationship)?

    *   the numbers we really care about:
        One or Zero!
	MUST the relationship exist for an entity instance,
	    or may it NOT exist?

*   SO MANY ways to indicate this!
    *   CS 325 class style standard:
        *   put an OVAL or a LINE NEAR the relationship line NEAR the
	    entity class rectangle involved;

        *   but you read these "across" the relationship line;

    |------------| 1     primary-teacher-of    N |--------|
    | Instructor |-|-----------/\--------------O-| Course |
    |------------|             \/                |--------|

            *   this means an instructor instance does not have to
	        be the primary-teacher-of any course

                BUT a course instance MUST have an instructor instance
		who is its primary-teacher;

    *   this is what these instances MUST have; (or may not be required to have)

*   end of E-R Modeling, part 1!

=====
NOW -- how about some SQL?
=====
*   DEMO some of the features discussed in SQL Reading Packet 3,
    WITH the understanding that you WILL read this packet
    and it has MORE details about these features;

*   a few points about SQL:
    *   it is NOT case-sensitve EXCEPT within quotes!
    *   I tend to type SQL in (mostly) lowercase, but I am fine if you use upper-case
        or mixed case
	*   it is nice if you follow a consistent pattern... 8-)

*   NOW: some more BASIC select statement SYNTAX and SEMANTICS:

    (we'll be ADDING to this as we ADD select CLAUSES in the next few
    weeks!)

    SYNTAX:

    *   angle and square brackets below are NOT part of the syntax,
        *   angle brackets are just surrounding a description
	*   square brackets are just surrounding OPTIONAL parts

    select [distinct] <one or more expressions, sep'd by commas>
    from <1 or more table expressions, sep'd by commas>
    [where <boolean expr>];

    SEMANTICS: [conceptually!! actual algorithms try to be more efficient!]

    *   STEP 1: take the CARTESIAN PRODUCT of the table expressions in the FROM
        clause

    *   STEP 2: take a relation SELECTION of the rows resulting from STEP 1
        for which the WHERE clause <boolean expr> is TRUE

    *   STEP 3: take a projection of the columns/expressions in the SELECT
        clause, in the order they appear, JUST from the rows resulting from
	STEP 2
	...and only remove duplicate rows from the result IF DISTINCT is
	   in the SELECT clause

*   see 325lect05-2.sql for examples of some more WHERE clause options,
    and more;

    *   but ran out of time, so moving table aliases, column aliases,
        computed columns, and aggregate functions to           
        NEXT WEEK's asynchronous material

    *   (you can certainly still practice with them in the meantime
        based on your reading of SQL Reading Packet 3, however! 8-) )