Homework #3 FAQ


PDA

General Tip Do NOT wait until the last minute to do the programming assignments. If everyone logs into Oracle tuesday night, Oracle will start to slow down. This might not effect this assignment much, but later assignments that are much more interactive (queries, etc.) will become frustrating if Oracle slows down (a query that might normally take 30 seconds may take several minutes).

Secondly, you want to take some extra time to make sure that the "filler" data you generate for your database is valid -- make sure that you develop unique keys as well as values that are duplicated in different tables so that you can perform joins on the tables. If you don't take the time to do this now, future assignments will not really be possible...


Question: I have put my schema in a file, but when I ask Oracle to read it, at the end I get a message of the form ``input truncated to n characters''
Answer: Probably you have left the RETURN off the end of the last line.


Question: The homework says that Oracle isn't being backed up, and I should save my data. How do I do that?
Answer: Oracle isn't being backed up, but all that means is that if it crashes, some data may be lost. So don't store your only copy of vital data there. When you load data using sqlldr, you have to save the data in a file and the file gets loaded into Oracle. Save that file in your leland account for the rest of the quarter. If you are typing in "real" data, keep that real data. This is a good idea anyway, since you may find it desirable eventually to "reload" your data into Oracle (ie when you do assignment 4, which asks you to modify the data in Oracle; to do this multiple times for debugging purposes you may have to reload the original data.)

Problem #2

Question: What are the equivalents of group-by and aggregation in relational algebra?
Answer: There ain't none. The questions we have asked you on HW3 can be answered in relational algebra without grouping and aggregation. The general idea is to first build a relation that is the cross-product of the relation you want to aggregate with itself. For instance, suppose we have Sells(bar,beer,price) and we want to find the minimum price at which beer is sold. We compute Sells TIMES Sells, and then select so the first of the prices is less than the second price. Now, in the second price column we have all the prices that are not minimum. We'll let you take it from there.

(Note: this technique works for MIN and MAX, but not for other aggregation operators. However, it can be used to simulate SQL features like ALL, ANY, and EXISTS, as well.)


Last modified: Tue Oct 19 16:36:27 PDT 1999