emuleomo@paul.rutgers.edu (Emuleomo) (11/09/89)
In article <HARGROVE.89Nov6202259@harlie.sgi.com>, hargrove@harlie.sgi.com (Mark Hargrove) writes: > In article <860@anasaz.UUCP> john@anasaz.UUCP (John Moore) writes: > [wonders if there are historical reasons for deficiencies in the > relational model and its tools, with example deficiencies cited] > > >Problems: > > (1) No support for vectors or arrays. Now, of course one can define a > > row for each element of an array, but that is not practical in some > > high performance cases. Why was this fundamental data organization > > concept not included. > > I've been designing commercial applications for more than five years using > relational technology, and I've never said to myself, "damn, if only I > had arrays!" The *only* time I've ever needed them at all was for Off course!! I have wished for this *several* times. Its the perfect data structure for *most* of the 1-to-many relationships we come across in real-life development. Suppose you want to be able to display all the invoices for a certain customer in the month of November?? (or whatever the current month is). In order to be able to do a multi-page browse of this list, it would be nice for the DBMS to somehow provide an array-like feature. However, this seems to be present in some 4GLs like Informix 4GL. Also in Ingres I once simulated that feature using "table-field". > > (2) No way (that I know of) to directly locate the "next" row > in a > query. In other words, I read a record off the database. > Now, WITHOUT etc..etc.. > as C). I *know* Unify has this capability, and I'd be astonished if the > other RDBMS players didn't support it as well. Well, what you really need is a NON-SQL based (psuedo relational?) DBMS like Informix 3.3 or Foxbase+ etc.. that allows you to specify access paths based on Index keys. Sometimes I prefer this to SQL especially when *only* one table is involved in a query! > > (3) No standard way to specify the range of a cursor. If I have a > > table - lets say a list of names that is very large, and I want > > to declare a cursor and read <= 20 names, how can I specify that > > other than calling a FETCH 20 times? How can I keep the RDBMS > > from internally reading 40 names, and then handing me them > > one at a time. Note that I am reading by an index, and want them > > in order. > > > You need to give a better example -- I'm not sure what you mean. > What he wants is this... "Let me see the 1st ten people on our mailing list in alphabetical order!" or something in that regard. If the DBMS uses the names of these people as the INDEX, this query becomes *very* trivial. In dBASE/Foxbase etc.. you may write USE MAILING index names LIST NEXT 10 The DBMS should search for and retrieve ONLY THE 1st TEN! Again, what you need is a NON-SQL DBMS! or one that marries both like dBASE IV v1.0 attempted to do. --Emuleomo O.O. (emuleomo@yes.rutgers.edu) -- ** The ONLY thing we learn from history is that we don't learn from history!
carl@eleazar.dartmouth.edu (Carl Pedersen) (11/10/89)
In one of his articles, john@anasaz.UUCP (John Moore) wrote: >My first posting was a query about historical reasons for >the lack of certain features in RDBMS'. All responses so far have >been of the form: > why fight it > you don't understand it >Does anyone have any idea why the above mentioned deficiencies exist, >or how to get around them In the case of arrays, "you don't understand it". It would not make sense to have an "array" concept in a relational system. >I have a hotel inventory that can be described as a two dimensional array (at each property) of room types by date Yes, or it can be described as a table, which you have already discovered. This is just a syntax issue, not a relational vs array issue. That table is operationally equivalent to an array, that is, there is nothing you can do with an array that you can't do with that table. There is no reason to make a distinction. You may think that the syntax of operations using the RDBMS is clumsier than some other syntax that you imagine to be associated with arrays, but that is an orthogonal issue. There's no reason why one could not define a syntax for accessing a table that is just as concise as what is used to access an array. I don't speak RTI's QUEL, language, but I suspect it's a bit closer to what you re asking for than, say, SQL. By the way, some silly language might require you to access what it calls an array by saying something like "FOO_ARRAY WHERE DIMENSION_INDEX(1) = '01/22/89' AND DIMENSION_INDEX(2) = 'BRIDAL SUITE'", instead of just "FOO_ARRAY('01/22/89','BRIDAL SUITE')". In the case where you need to get the next 20 records, or the next record, etc., with or without using cursors, I think you have identified a real problem with at least some products. As I'm sure you have heard, relational systems work with sets, and sets don't have an inherent order. Of course, you can define ordering in purely set-theoretic terms, but it's too clumsy. That's why languages like SQL have ways to specify the order of a result. To be honest with you, I think the only reason some RDBMS vendors don't provide what you need is because they have't gotten around to it, yet. I think eventually they will. There are applications that need this functionality. We have an email system, for example, that wants to show the user the first 20 messages in their in-box. When they scroll down, it wants to get the next 20, and so on. Then, when they scroll up, it wants to be able to get the *previous* 20 messages, and so on. We don't really want to number the messages because 1) users are allowed to display their in-box in several different orders and 2) new messages can appear at any time. Cursors are only a partial solution to this problem. I think it would make sense to provide a way to say something like, "Give me N rows from this ordered set starting at the Ith row." Perhaps there are better ways to specify this, but you get the idea. I don't think this would be any more out of place in a language like SQL than "order by" is. By the way, if anybody has any neat ideas about how to handle problems like this in current SQL implementations, especially ORACLE, I'd love to hear them.
hargrove@harlie.sgi.com (Mark Hargrove) (11/10/89)
In article <Nov.9.08.11.08.1989.12756@paul.rutgers.edu> emuleomo@paul.rutgers.edu (Emuleomo) writes: >What he wants is this... >"Let me see the 1st ten people on our mailing list in alphabetical order!" >or something in that regard. >If the DBMS uses the names of these people as the INDEX, this query becomes >*very* trivial. In dBASE/Foxbase etc.. you may write > >USE MAILING index names >LIST NEXT 10 > >The DBMS should search for and retrieve ONLY THE 1st TEN! > >Again, what you need is a NON-SQL DBMS! or one that marries both like >dBASE IV v1.0 attempted to do. Yeah, I think I agree here. SQL is just a tool, and it sounds like you're trying to use embedded SQL (or a lousy 4GL) for something it doesn't do well. What you're trying to do is *perfectly reasonable*, and if SQL doesn't do it well, use another tool. Unify's ACCELL 4GL environment, for example, has an attribute that can be set called FIND_LIMIT, which controls the cardinality of a FIND (Query) operation. IF you set it at, say, 20, it will get the first 20 records of the found set, then fetch the next 20 when the user (via the application) wants the next set, etc. This same functionality could also be implemented in Unify's C-HLI. How about some ideas from you lurkers at Ingres, Oracle and Sybase? How would *you* solve this absolutely reasonable problem with your product? -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Mark Hargrove Silicon Graphics, Inc. email: hargrove@harlie.corp.sgi.com 2011 N.Shoreline Drive voice: 415-962-3642 Mt.View, CA 94039
jkrueger@dgis.dtic.dla.mil (Jon) (11/10/89)
john@anasaz.UUCP (John Moore) writes: >RDBMS are being sold as THE solution to modern >commercial processing Sane people do not sell this notion, and sane people do not buy it. Don't deplore the hype, explore it. Phrases like "the solution" and "modern" and "commercial processing" are part of the hype, not part of its analysis. In any calm analysis they have little status as meaningful terms anyway. Try "useful", or "productive". >and yet I am asked to accept that it is built on >set processing, with no reference to "next", "previous", etc! In the real >world, these are very important concerns. Next and previous with respect to what, the sort? That defines an ordinal scale in which any and every item's next and previous could change with respect to any and every other item with any change to the database. What is defined by this metric? Current adjacency? If you'll examine a few examples I think you'll find you're either overloading the notion of primary key or else mixing the usefulness of commonly executed queries with integrities defined on the database at all times. >room on their screen for 20 names. How can I only get 20 names? See my private mail to you for an example. -- Jon -- Jonathan Krueger jkrueger@dtic.dla.mil uunet!dgis!jkrueger Isn't it interesting that the first thing you do with your color bitmapped window system on a network is emulate an ASR33?
dlw@odi.com (Dan Weinreb) (11/10/89)
In article <881@anasaz.UUCP> john@anasaz.UUCP (John Moore) writes:
My first posting was a query about historical reasons for
the lack of certain features in RDBMS'. All responses so far have
been of the form:
why fight it
you don't understand it
Not at all; several of the responses, like mine, were of the form "You
asked about the relational model, but the deficiencies you note
actually don't have anything to do with the relational model per se,
but rather the way current RDBMS products work." I realize that this
doesn't help solve your problems; I and others were just trying to
clarify the question. Anyway, you rightly don't care about the
relational model, or what a theoretical DBMS might do; you're asking
about actual existing products.
Also, I think the "why fight it" answers were not intended to give
offense, or to tell you that nobody cares. They merely meant "I don't
understand why cursors don't solve your problem, would you please
explain more specifically". In your subsequent postings, you have
indeed explained more specifically, and now the people who are
experienced with commercial RDBMS products should be able to provide
more useful answers. Good luck.
john@anasaz.UUCP (John Moore) (11/10/89)
In article <16647@dartvax.Dartmouth.EDU> carl.pedersen@dartmouth.edu (Carl Pedersen) writes: >In the case of arrays, "you don't understand it". It would not >make sense to have an "array" concept in a relational system. It makes sense in two ways: (1) In the access language (and my gripe here is really with SQL), the array syntax may be convenient. This is not a problem with the relational model per se, but with SQL. (2) When considering access efficiency, which is really where my concern came from. If I have data that I am likely to access as an array, but the RDBMS scatters it all over the disk (after all, relational sets have no inherent ordering), I can't access it efficiently. This is a real world problem that we have today. Now, some vendors attempt to do something about this, but this is outside the relational model or SQL. Informix allows "clustering" of data to get around this problem. It suffers from two difficulties: (1) efficiency is not all that high because all key fields of the row are stored every time, so the number of elements per disk block is MUCH lower than it would be with a true array type; (2) it does not maintain the ordering over inserts and deletes, so it is not useful for a dynamic database. Oracle does it better - it allows a clustering where a number of rows with the same key can be stored in the same sector, without duplicating the key data. I don't remember what Unify, Sybase or Ingress do. ] ]>I have a hotel inventory that can be described as a two ]dimensional array (at each property) of room types by date ] ]Yes, or it can be described as a table, which you have already ]discovered. This is just a syntax issue, not a relational vs ]array issue. That table is operationally equivalent to an array, ]that is, there is nothing you can do with an array that you can't ]do with that table. There is no reason to make a distinction. THE TABLE IS NOT OPERATIONALLY EQUIVALENT TO AN ARRAY! It is semantically equivalent, but when you factor in performance, or ease of use of syntax, it is not the same! I suspect that it is this confusion of semantics with operational equivalence (common in academia) that has lead to the lack of features in RDBMS/SQL. ]You may think that the syntax of operations using the RDBMS is ]clumsier than some other syntax that you imagine to be associated ]with arrays, but that is an orthogonal issue. There's no reason ]why one could not define a syntax for accessing a table that is ]just as concise as what is used to access an array. I don't ]speak RTI's QUEL, language, but I suspect it's a bit closer to ]what you re asking for than, say, SQL. By the way, some silly The problem is that we are trying to base our product on a multivendor standard, and that forces use to use SQL. There are lots of better solutions around to our problems, but they are not standard. It is the standard (explicit, or implicit by what is available) that concerns me. ]In the case where you need to get the next 20 records, or the ]next record, etc., with or without using cursors, I think you ]have identified a real problem with at least some products. ] ]As I'm sure you have heard, relational systems work with sets, ]and sets don't have an inherent order. Of course, you can ]define ordering in purely set-theoretic terms, but it's too ]clumsy. That's why languages like SQL have ways to specify the ]order of a result. To be honest with you, I think the only ]reason some RDBMS vendors don't provide what you need is because ]they have't gotten around to it, yet. I think eventually they ]will. There are applications that need this functionality. I think they haven't done it because cursors provide the appropriate functionality, as long as you don't look under the hood and see what it is doing to your performance, and as long as you are willing to live with restrictions on which process can do a FETCH NEXT. (ie the process per user model). ] ]By the way, if anybody has any neat ideas about how to handle ]problems like this in current SQL implementations, especially ]ORACLE, I'd love to hear them. You and me both! (except, in my case, Informix) -- John Moore (NJ7E) mcdphx!anasaz!john asuvax!anasaz!john (602) 861-7607 (day or eve) long palladium, short petroleum 7525 Clearwater Pkwy, Scottsdale, AZ 85253 The 2nd amendment is about military weapons, NOT JUST hunting weapons!
john@anasaz.UUCP (John Moore) (11/10/89)
Jonathan Krueger jkrueger@dtic.dla.mil uunet!dgis!jkrueger writes in private email that I can't seem to get a response path to: ] ]>Yes... I have a hotel inventory that can be described as a two ]>dimensional array (at each property) of room types by date. I ]>can represent this is an RDBMS with rows where each row has ]>a room type and date attribute, followed by the data I wish to keep ]>for this cell. However, it is more graceful, since the data is ]>logically an array, and it is certainly more efficient with CURRENT ]>RDBMS products, to represent the data syntactically as an array. ] ]The data is logically a set. You may implement it as an array, ]but it is less efficient: try inserting a new room. You may The efficiency depends on the relative frequency of inserting vs. searching. ]also implement it as a table, or hierarchy, or network; all ]data models have advantages and disadvantages. I take it one ]correct set of schema is: ] ] +-------+ ] | rooms | hotel room type ] +-------+----------+-------+--------+ ] | West End | D-104 | single | ] | East End | 37 | double | ] | NiteLite | 11 | suite | ] | NoTell | A/100 | bridal | ] +----------+-------+--------+ No, more correct would be: rooms hotel room-type date available West End double 12/1/89 30 West End double 12/2/89 20 West End double 12/3/89 00 West End double 12/4/89 12 West End double 12/5/89 30 West End double 12/6/89 30 ... West End single 12/1/89 30 ... Note: total # dates might be 730, # room-types per hotel could be 20, total # hotesl could be thousands Query: find me a room in Chicago for Jan 3 - Jan 14, 1989. assume another table gives list of hotels in chicago. Now, we can readily frame the query in SQL using a normal table organization. However, when we examine what the RDBMS will do to solve the query, given that the set has no ordering, it will have to read a number of rows from all over the disk. On the other hand, if we were to group a bunch of room types and dates together into single rows, we can read many fewer rows from the disk. Not only that, the total amount of data read can be less, since the key information need not be read for each "cell", only for each "array". Note that even with current tools, we could do this, but we would have to name each "cell" in a logical array with a different column name, which is certainly not very graceful! In other words, we could have a table that looks like: hotel date avd1r1 avd2r1 avd3r1 avd4r1 avd1r2 avd2r2 avd3r2 .... One ends up either generating dynamic queries (not normally very efficient, but an approach that we considered) or writing code that knows the name of every column. This is not very convenient. The other approach using current tools is to use clustering. Oracle does it best of the ones I have seen (see related posting). Unfortunately this is not standard, and thus code which depends on this is not portable between RDBMS vendors. I could readily come up with other examples where arrays are even more natural. ]>I have a list of 100,000 names. I wish to display ]>the first 20 names following J. Smith. If I get a "more" response ]>from the operator, I wish to display the next 20 names. Furthermore, ]>I wish to process these requests with separate Unix processes, so ]>the standard cursor approach (just leaving a cursor open) doesn't ]>do the job. ] ]Wrong. Counterexample: ] ] +---------+ ] | broaden | term bt ] +---------+----------------------+-----------------------+ ] | CPU | COMPUTER | ] | CPU | PROCESSOR | ] | MEMORY | COMPUTER | ] +----------------------+-----------------------+ ] ]#include <stdio.h> ]#define NOT_FOUND 100 /* correct for RTI INGRES only */ ^^^this definition also works for Informix, by the way ]exec sql include sqlca; ]#define BUNCH 20 ] ]fetchit(ref) ]exec sql begin declare section; ]char *ref; ]exec sql end declare section; ]{ ] exec sql begin declare section; ] char c_term[50]; ] char c_bt[50]; ] exec sql end declare section; ] int counter = 0; ] ] printf("fetching broader terms for \"%s\"\n", ref); ] exec sql declare csr cursor for ] select trim(term), trim(bt) from broaden where term = :ref; ] exec sql open csr; ] ] while (!sqlca.sqlcode) { ] exec sql fetch csr into :c_term, :c_bt; ] if (sqlca.sqlcode == NOT_FOUND) { ] break; ] else { ] printf("for %s, try %s\n", c_term, c_bt); ] if (++counter%BUNCH == BUNCH) ] prompt("more"); ] } ] } ] exec sql close csr; ]} ] ]#define TMPSIZE 100 ]prompt(what) ]char *what; ]{ ] char tmp[TMPSIZE]; ] printf("%s: ", what); ] fgets(tmp, TMPSIZE - 1, stdin); ]} ] ]Let's not debate what can't be done when I'm currently doing it. No, you are not doing it! Look at my conditions again! Your example only works with a single process. Try sending the "more" prompt, and then taking the answer into another Unix process! ] ]>Why doesn't the ]>basic model deal with these issues? ] ]It's no part of set operations. ] ]>This is a case where ]>the "set" is defined by ordering - the FIRST n rows meeting ]>a certain criteria, as opposed to ALL rows meeting the criteria. ] ]OK, you want to get a car wash and a burger What's the union of the ]first 20 car washes nearest you with the first 20 burger joints near ]you? Do you think it's your best route? If you answered yes, you're ]wrong. The 21st of each might define a much better route. Set ]operations are defined only under certain limits. ] ]There's nothing wrong with the convenience of sorting, or presenting ]a bunch of rows at a time, or not requiring all queries to run to ]completion before making the first match available for display. But ]these are not defined by the model; they are ways for vendors to add ]value to the model. Some vendors do. ] And this is the whole problem! What it means is that the model is inadequate to solve many real world problems. It would be much better to upgrade the standard to solve these problems than to leave it to individual vendors. In this modern day of portable programs, I see no reason why an application should only work with one vendor's RDBMS, just because the standard is inadequate! Please, we need real solutions, not ivory tower theorems! ] ]You can shop for a vendor who provides this feature. Note that if he ]provides it without enabling you to turn it off, you simply trade ]throughput for latency: no net win. ] Again, if we can get it into the standard, the whole user community wins! ]>]> Note that I am reading by an index, and want them in order. ] ]The two issues are orthogonal, and are mutually orthogonal to the ]ability to display rows as soon as they qualify, which three issues are ]wholly orthogonal to performance, since again you're simply trading ]latency for throughput. But, latency and throughput are DIFFERENT measures of performance. It is not unusual for a contract to specify LATENCY (x% transactions complete in y seconds) AND throughput (...at a rate of z transactions per second). Both need to be controllable. ] ]>]All commercial products have ways to break out of a select loop. ] ]>You miss the point. The FETCH is the way you do a select loop. However, ]>commercial products (especially client-server types) tend to pre-fetch a ]>group of rows when a cursor is declared, and then feed them to you one ]>at a time. I am interested in performance so want to have the internal ]>RDBMS engine only fetch as many rows as I am interested in. ] ]Pre-fetching is transparent to the model and embedded use both. If you ]want to flush results as soon as each qualifies, you can. This has ]nothing to do with cursors; it's true for retrieve loops as well, which ]use no cursors at all. Jon, please try to understand. I am dealing with high performance, REAL WORLD transaction processing. I really don't care what the model says, or how elegant or complete it says, if it can't solve the problems portably, efficiently and predictably! P.S. If you respond, please do it on the net, since I have to reply there anyhow. ... PPS - assault rifles have nothing to do with RDBMS. It's just too much of a pain to change my signature for each group. Sorry. -- John Moore (NJ7E) mcdphx!anasaz!john asuvax!anasaz!john (602) 861-7607 (day or eve) long palladium, short petroleum 7525 Clearwater Pkwy, Scottsdale, AZ 85253 The 2nd amendment is about military weapons, NOT JUST hunting weapons!
kitchel@iuvax.cs.indiana.edu (Sid Kitchel) (11/11/89)
john@anasaz.UUCP (John Moore) has asked why the relational model does not contain array access. Several posters have tried to set him straight on the nature of relations in the model and how that makes the notion of array unnecessary. On the implementation front, it is clear that array operations as opposed to one-at-time cursors could be useful to the application writer. In fact ORACLE agrees so much with this view that they have provided array- oriented insert and retrieval in their embedded SQL facility. I have used it while helping to implement DOME (Distributed Object Management Environment), an object-oriented database system built on top of ORACLE. DOME Software Corp.'s experience is that the array operations significantly speed up their object server. One of the reason's that ORACLE was chosen as their first platform was the array facility. Now if the other vendors would also follow up on this and speed up basic operations.... --Sid -- Sid Kitchel ===================================== Computer Science Department kitchel@iuvax.cs.indiana.edu Indiana University skitchel@gold.bacs.indiana.edu Bloomington, Indiana 47405-4101...............skitchel@iubacs.BITNET
jkrueger@dgis.dtic.dla.mil (Jon) (11/11/89)
hargrove@harlie.sgi.com (Mark Hargrove) writes: >How would *you* solve this absolutely reasonable problem with your product? Any product that supports embedded query language has already solved it. After receiving each row, programs may count it, display it, pause, prompt the user. Mechanisms such as the one you cite are not necessary nor, in my view, desirable. -- Jon -- Jonathan Krueger jkrueger@dtic.dla.mil uunet!dgis!jkrueger Isn't it interesting that the first thing you do with your color bitmapped window system on a network is emulate an ASR33?
jkrueger@dgis.dtic.dla.mil (Jon) (11/11/89)
kitchel@iuvax.cs.indiana.edu (Sid Kitchel) writes: >ORACLE [has] provided array-oriented insert and retrieval >in their embedded SQL facility. The operation insert is not defined on the data type array. If you believe it is, please tell us the difference between an array and a set. -- Jon -- Jonathan Krueger jkrueger@dtic.dla.mil uunet!dgis!jkrueger Isn't it interesting that the first thing you do with your color bitmapped window system on a network is emulate an ASR33?
peno@kps.UUCP (Pekka Nousiainen /DP) (11/12/89)
In article <29421@iuvax.cs.indiana.edu> kitchel@iuvax.cs.indiana.edu (Sid Kitchel) writes: > On the implementation front, it is clear that array operations as >opposed to one-at-time cursors could be useful to the application writer. >In fact ORACLE agrees so much with this view that they have provided array- >oriented insert and retrieval in their embedded SQL facility. Using arrays speeds up "batch" operations significantly (factor of 5) but in my experience arrays are of no help to the application programmer. The situation is similar to reads and writes in C language. Reading and writing one character at a time is most convenient, but very expensive if one uses the read() and write() system calls. Hence C has a buffered interface to read and write - <stdio>. The problem with Oracle arrays is that there is no analogue of <stdio>. Each instance must handle the buffering details. While they are not much, they do amount to something if one has tens or hundreds of programs to maintain. -- peno@kps.se
dgh@unify.UUCP (David Harrington) (11/14/89)
In article <888@anasaz.UUCP> john@anasaz.UUCP (John Moore) writes: > >The problem is that we are trying to base our product on a >multivendor standard, and that forces use to use SQL. There are lots >of better solutions around to our problems, but they are not >standard. It is the standard (explicit, or implicit by what >is available) that concerns me. > Accell/SQL, the 4GL and applications generator form Unify, is the standard you want. It will let you do all the NEXT RECORD processing you have been talking about in this discussion, and it will run your application on all the databases that have been discussed here. Accell/SQL's 4GL isn't SQL, but if you need SQL Unify and every other database have that, too. With it you get performance AND SQL functionality, not to mention database independance. David Harrington Director, Accell Development Unify Corp.
dgh@unify.UUCP (David Harrington) (11/15/89)
In article <1244@unify.UUCP> dgh@unify.UUCP (David Harrington) writes: > >Accell/SQL's 4GL isn't SQL, but if you need SQL Unify and every other database >have that, too. With it you get performance AND SQL functionality, not to >mention database independance. Re-reading this last paragraph, it occurs to me that one could get the wrong idea about Accell/SQL. So: Let me re-phrase that. Accell/SQL's 4GL has full embedded SQL functionality, if not strict ANSI syntax, and much, much more. > > >David Harrington >Director, Accell Development >Unify Corp.
catone@dsl.cis.upenn.edu (Tony Catone) (11/29/89)
In article <881@anasaz.UUCP> john@anasaz.UUCP (John Moore) writes: >You tell me! Here is the application: I have a reservation system with >500,000 names in it. Someone wants to display a list of similar >names (where similar can be resolved to >= "xxx"). They only have >room on their screen for 20 names. How can I only get 20 names? I believe Oracle's SQL-Forms module allows you to specify this automatically. Give them a call and ask for the SQL-Forms demo disk; it will show you what you need to know. Be forewarned, however, that Oracle sales people can be a bit much to deal with sometimes, so you really want to ask for the product literature and demo disk and then decide for yourself. - Tony catone@dsl.cis.upenn.edu catone@wharton.upenn.edu
nico@unify.uucp (Nico Nierenberg) (11/29/89)
In article <17393@netnews.upenn.edu> catone@dsl.cis.upenn.edu (Tony Catone) writes: >In article <881@anasaz.UUCP> john@anasaz.UUCP (John Moore) writes: >>You tell me! Here is the application: I have a reservation system with >>500,000 names in it. Someone wants to display a list of similar >>names (where similar can be resolved to >= "xxx"). They only have >>room on their screen for 20 names. How can I only get 20 names? > >I believe Oracle's SQL-Forms module allows you to specify this automatically. >Give them a call and ask for the SQL-Forms demo disk; it will show you what >you need to know. Be forewarned, however, that Oracle sales people can be >a bit much to deal with sometimes, so you really want to ask for the product >literature and demo disk and then decide for yourself. Accell from Unify can do this using the browse feature, and if you set up your indexes correclty it will only look at the rows which are actually displayed. The user can then decide to browse through additional rows. Best of all it will do it on any one of several data bases. Nicolas Nierenberg Unify Corp.