Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Lecture 3 Object database standards, languages and design CIS 671 OODBs 1 Development of Object-based Systems • Object-Oriented Database Systems – An alternative to relational systems – Application domains where objects play central role – Heavily influenced by object-oriented programming languages – An attempt to add DBMS functionality to a programming language environment CIS 671 OODBs 2 Development of Object-based Systems - cont. • Object-Relational Database Systems – An attempt to extend relational databases • Broader set of applications – Provide bridge between relational and objectoriented systems CIS 671 OODBs 3 Why a Standard? • Portability from one vendor (system) to another • Interoperability between systems based on different vendor products easier CIS 671 OODBs 4 Object Data Management Group (ODMG) • ODMG-93 or ODMG 1.0; ODMG 2.0 (1997) • Parts – – – – CIS 671 Object model Object definition model (ODL) Object query language (OQL) Bindings to OO programming languages OODBs 5 Unified Modeling Language (UML) • Consortium of vendors including DEC HP IBM Unisys I-Logix Intellicorp MCI Systemhouse TI Microsoft Icon Computing Rational Software Oracle • UML 0.9 (1996); UML 1.1 (1997) • Unified as to - Differences in Modeling Languages - Differences in Perspectives CIS 671 OODBs 6 ODMG Object Model • Literal – – – – State (or value) {constant} No OID May have complex structure Types of literals • Atomic - Simple, e.g., 10.2 - Structured, e.g. Date (19, May, 2001) • Collection, e.g. days of the week (Sun, Mon, …, Sat) CIS 671 OODBs 7 ODMG Object Model • Object – – – – Identifier (OID) Name (optional) Lifetime (persistent or transitory) Structure • How constructed – Atomic – Collection: t a type, k a key, v a value » Set <t> » Bag <t> » List <t> » Array <t> » Dictionary <k, v> • Specified by interface CIS 671 OODBs 8 Interface Definitions from ODMG Object Model • Object Data Language – ODL CIS 671 OODBs 9 Examples: Object – inherited by all objects Date – structured literal interface Object { … boolean same_as(in Object other_object); Object copy(); void delete(); } Date is subtype of Object (i.e., inherits from). Operations are inherited by userdefined objects. CIS 671 interface Date: Object { enum Weekday {Sunday, Monday, …, Saturday}; enum Month {January, February, …, December}; unsigned short year(); unsigned short month(); unsigned short day() … boolean is_equal(in Date other_Date); boolean is_greater(in Date other_Date); … } OODBs 10 See text for the following examples: • Structured Literals • Collection Objects – Time – Timestamp – Interval – Collection • • • • • Iterator Set Bag List Array – Association – Dictionary CIS 671 OODBs 11 Object Interfaces • All objects inherit basic interface of Object using dot notation: – o.same_as(p) – true if p is the same as o – p = o.copy() – create copy p of object o – o.delete() – delete object o • May also use arrow notation: – o->same_as(p) – true if p is the same as o CIS 671 OODBs 12 Class Definition Examples: Employee Class Employee ( extent all_employees key ssn ) { attribute string name; attribute string ssn; attribute date birthdate; attribute enum Gender{M,F} sex; relationship Department works_for inverse Department::has_emps; void reassign_emp(in string new_dname) raises(dname_not_valid) ; } CIS 671 OODBs Note that both “works_for” and inverse relationship, “has_emps”, are specified. 13 Class Definition Examples: Department Class Department ( extent all_departments key dname, dnumber ) { attribute string dname; attribute short dnumber; attribute struct Dept_Mgr{Employee manager, date startdate} mgr; attribute set<string> locations; attribute struct Projs {string projname, time weekly_hours} projs; relationship set<Employee> has_emps inverse Employee::works_for; void add_emp(in string new_ename) raises(ename_not_valid); void change_manager(in string new_mgr_name) in date startdate); } CIS 671 OODBs 14 Relationships works_for and has_emps between Employee and Department Class Employee {… relationship Department works_for inverse Department::has_emps; } Class Department {… relationship set <Employee> has_emps inverse Employee::works_for; } CIS 671 OODBs 15 COMPANY database in ODL Diagram more details on page 680 in book works_for supervisee employs EMPLOYEES DEPARTMENT managed_by manages supervisor manager has_ dependents works _on department MANAGE_DEPT located_at controls has_ departments LOCATION employee has_ projects WORKS_ON_PROJECT project dependent_of DEPENDENT controlled _by located_at employees_on PROJECT CIS 671 OODBs 16 Object Types: Interfaces vs. Classes • Terminology – Behavior: operations – State: properties (attributes & relationships) • Interface (e.g. Date) • Class (e.g. Employee) – Abstract behavior, specification via operation signatures – Noninstantiable (i.e. cannot have object matching description) – Used via inheritance (behavior inheritance “:”) CIS 671 OODBs – Abstract behavior – Abstract state – Instantiable 17 Inheritance Relationships: Behavior vs. Extends • Behavior Inheritance • EXTENDS Inheritance – Supertype must be interface – Subtype may be interface or class – Denoted by “:” – Multiple inheritance permitted CIS 671 – Inherit state and behavior among classes • Both supertype and subtype must be classes – Multiple inheritance not permitted – Specified by extends keyword OODBs 18 Example: Person UNIVERSITY Database Class Person ( extent persons key ssn ) { attribute struct Pname {string fname, string mname, string iname} name; attribute string ssn; attribute date birthdate; attribute enum Gender{M,F} sex; attribute struct Address {short no, string street, …, short zip} short age(); } CIS 671 OODBs 19 Example: Faculty UNIVERSITY Database Class Faculty extends Person ( extent faculty) { attribute string rank; attribute float salary; attribute string office; attribute string phone; relationship Department works_in inverse Department::has_faculty; relationship set<GradStudent> advises inverse GradStudent ::advisor; relationship set<GradStudent> on_committee_of inverse GradStudent ::committee; void give_raise(in float raise); void promote(in string new_rank); } CIS 671 OODBs Extends inheritance from Person 20 Example: other classes UNIVERSITY Database • Student extends Person • Degree • GradStudent extends Student • Department CIS 671 • Course • Section • CurrSection extends Section • Grade OODBs 21 Factory Objects • Used to generate individual objects • Examples – ObjectFactory – DateFactory – DatabaseFactory • Include new() operation Interface ObjectFactory { Object new(); } CIS 671 OODBs 22 Database Factory interface Database { void open(in string database_name); void close(); void bind( in any some_object, in string some_object); Object unbind(in string name); Object lookup(in string object_name) raises(ElementNotFound); } interface DatabaseFactory { Database new(); } CIS 671 OODBs 23 Object Database Standards, Languages, and Design Part II: Object Query language (OQL) CIS 671 OODBs 24 Object Query Language (OQL) • • • • “Bring the best of SQL to the object world.” Syntax similar to SQL Plus additional features Works with programming languages where ODMG has defined bindings – Java, C++, Smalltalk – Returns object matching type system of that language – May implement class operations in these languages • SQL3 – “Bring the best of the object-oriented world to the relational world.” CIS 671 OODBs 25 Movies Example: Movies, Stars, Studios Movie title year length /* in minutes */ filmType:{color, blackAndWhite} lengthInHours starNames otherMovies Star name starredIn address street 1..* city stars 1..* ownedBy owns Studio 1..1 name 1..* Set of stars of this movie. Other movies by star of this movie. CIS 671 OODBs 26 Movies Example: Movies, Stars, Studios class Movie (extent Movies key (title, year)) { attribute string title; attribute integer year; attribute integer length; /* in minutes */ attribute enumeration (color, blackAndWhite) filmType; relationship set<Star> stars inverse Star :: starredIn; relationship Studio ownedBy inverse Studio :: owns; float lengthInHours() raises(noLengthFound); starNames(out set<String>); otherMovies(in Star, out set(<Movie>) raises(noSuchStar); }; CIS 671 OODBs 27 Class Star (extent Stars { key name) Movies Example, contd. attribute string name; attribute struct Addr; {string street, string city} address; relationship set<Movie> starredIn inverse Movie :: stars; }; Class Studio (extent Studios key name) { attribute string name; relationship set<Movie> owns inverse Movie :: ownedBy; }; CIS 671 OODBs 28 Specifying data from ODB • Path expression – Dot notation similar to structure in programming language, – e.g., o.a attribute a of object o. • Select-From-Where expression – Similar to SQL. – References are to data classes, not relations. • Integrated directly into host language. CIS 671 OODBs 29 Path Expressions Assume myMovie a host-language variable, value a Movie object. • myMovie.length - length of the movie. • myMovie.lengthInHours() - real number, computed as length in minutes. • myMovie.stars – set of Star objects related to myMovie by relationship stars. • myMovie.starNames(myStars) – returns no value, sets output variable myStars of method starNames to set of strings with names of the stars of the movie. • myMovie.ownedBy.name – string that is name of studio owning myMovie. CIS 671 OODBs 30 Select-From-Where Expressions, I • Year of the movie Gone with the Wind. select m.year from m in Movie where m.title = “Gone with the Wind”; • Bag containing names of stars of Casablanca. Might contain duplicates, therefore bag. select s.name from m in Movies, s in m.stars Must name all components in hierarchy, where m.title = “Casablanca”; i.e., Movies & stars. • Set containing names of stars of Disney movies. select distinct s.name from m in Movies, s in m.stars where m.ownedBy.name = “Disney”; CIS 671 OODBs No duplicates, therefore set. 31 Select-From-Where Expressions, II • Pairs of stars living at the same address. select distinct struct(star1: s1, star2: s2) Result is set of structs. from s1 in Stars, s2 in Stars where s1.addr = s2.addr and s1.name < s2.name; • Set containing names of stars of Disney movies, using subquery. Select distinct s.name Bag of all Disney from (select m movies. from m in Movies where m.ownedBy.name = “Disney”) dm, Stars in those movies. s in dm.stars; • Set of all Disney movies, ordering results by length and title. select m from m in Movies where m.ownedBy.name = “Disney” order by m.length, m.title; CIS 671 OODBs List of Movies in ascending order 32 Select-From-Where Expressions, III • Set containing names of stars of Disney movies, using existential quantifier. select distinct s.name from s in Stars where exists m in s.starredIn : m.ownedBy.name = “Disney”; • Set containing names of stars that have appeared only in Disney movies, using universal quantifier. select distinct s.name from s in Stars where for all m in s.starredIn : m.ownedBy.name = “Disney”; CIS 671 OODBs 33 Select-From-Where Expressions, IV • Average length of all movies. Want bag of lengths, not set. Avg( select m.length from Movies m); • Table of lengths of movies for each studio for each year. select std, yr, sumLength: sum( select p.m.length from p in partition) from m in Movies group by std: m.studio, yr: m.year; • Table of lengths of movies for each studio for each year where studio produced at least one movie of over 120 minutes in that year. select std, yr, sumLength: sum( select p.m.length from p in partition) from m in Movies group by std: m.studio, yr: m.year having max(select p.m.length from partition p) > 120; CIS 671 OODBs 34 Views •View returning Set containing movies by studio studio. define moviesFromStudio(studio) as select m from m in Movies where m.ownedBy.name = studio; CIS 671 OODBs Do not need “distinct m”, since Movies is already a set. 35 Returning a single element • Bag or Set (if distinct included) normally returned. • May want single element. • Return Movie with name Casablanca. Element (select m from m in Movies where m.title = “Casablanca”); CIS 671 OODBs 36 Find names of those who starred in all Disney movies. Movie title year length /* in minutes */ filmType:{color, blackAndWhite} lengthInHours starNames otherMovies stars 1..* ownedBy 1..* Star name starredIn address street 1..* city owns Studio 1..1 name Idea: select s.name from s in Star where for all DisneyMovies exists ds in DisneyMovies.stars with same name; CIS 671 OODBs 37 Find names of those who starred in all Disney movies: First attempt. 1. Using “if p then q”. select s.name from s in Star where for all m in Movie : (if m.ownedBy.name = ‘Disney’ then exists s1 in m.stars : s1.name = s.name); 2. Converting “if p then q” to “~p or q”. select s.name from s in Star where for all m in Movie : (m.ownedBy.name != ‘Disney’ or exists s1 in m.stars : s1.name = s.name); CIS 671 OODBs 38 Find names of those who starred in all Disney movies: Using a view of all Disney movies. View returning Set of Disney movies. define DisneyMovies as select m from m in Movies where m.ownedBy.name = ‘Disney’; 3. Query for stars using the DisneyMovies view. select s.name from s in Star where for all dm in DisneyMovie : (exists s1 in dm.stars : s1.name = s.name); CIS 671 OODBs 39 Find names of those who starred in all Disney movies: Using the Movie.starNames function. Change – – starNames(out set<String>) to a function set<String> starNames() 4. Query for stars using the DisneyMovies view and starNames() function. select s.name from s in Star where for all dm in DisneyMovie : s.name in dm.starNames(); CIS 671 OODBs 40