From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Windows Ada database support.
Date: Thu, 9 Dec 2004 15:03:12 +0100
Date: 2004-12-09T15:03:12+01:00 [thread overview]
Message-ID: <1gontmpcus5kl.3fhaa7wwj8ee.dlg@40tude.net> (raw)
In-Reply-To: wvbrk6rroe4o.fsf@sun.com
On 09 Dec 2004 13:22:15 +0100, Ole-Hjalmar Kristensen wrote:
>>>>>> "DAK" == Dmitry A Kazakov <mailbox@dmitry-kazakov.de> writes:
>
> <snip>
> >>
> >> Dmitry, what is your plan the other way round, i.e. how do you
> >> make data related expressions for some nice higher level abstraction?
>
> DAK> You have cunningly formulated the problem so that there is no higher level!
> DAK> (:-)) There is either:
>
> DAK> for I in S'Range loop
> DAK> if S (I).Key in 100..200 then
> DAK> for J in T'Range loop
> DAK> if T (J).Foo = S (I).Key then
> DAK> Append (Result, S (I).Key, T (J).Foo);
> DAK> end if;
> DAK> end loop;
> DAK> end if;
> DAK> end loop;
>
> DAK> or you define "*" (product) for the type Table'Class (of S and T) + other
> DAK> operations to extract sets from the tables.
>
> DAK> But the question is why an application should always organize its data in a
> DAK> way which could require implementation these, very expensive, operations?
> DAK> Isn't it so that tabular view just forces global container operations? When
> DAK> we write in Ada we avoid global operations. How often you copy an array in
> DAK> Ada (except String<->Unbounded_String conversion (:-))? Merge two arrays?
> DAK> Isn't S and T just a two-dimensional array?
>
> Yes, and you have generic tools to follow relations (join). But There
> *are* reasons for organizing your data this way *in the database*.
> This organization is very flexible, but as you observe, may be
> expensive. SQL compilers have do do lots of optimizations to allow
> efficient execution of complex queries, especially since a large
> database is orders of magnitude bigger than the amount of available
> memory. The basic idea is that you organize your data in a way that
> captures the aspects that are inherent to the data domain itself, not
> specific to any particular application. This data model (the
> conceptual schema) can then support a very large set of different
> applications with no need to reorganize the data model. This is much
> more flexible than the old network databases, where the access paths
> (indices, pointers) were hard-coded into the data model, giving
> excellent performance for some applications, and absolutely abysmal
> for others, in addition to being hard to maintain. In the three-schema
> architecture, each different application is then supported by a
> different external schema, typically a subset or a transformation of
> the conceptual schema. The application itself need not organize its
> internal structures as tables, but having a sound conceptual view and
> a normalized structure is really a necessity if your database is going
> to support a multitude of applications. This line of thinking
> obviously originates from corporate databases and the like, where
> there is a need to maintain a large body of data *independently* of
> the applications which may happen to use them.
Right. They have a giant garbage container and just throw everything in.
The applications have to sort out. (:-)) This approach is efficient no
longer the variety of applications remains very limited. What does anything
just a bit more complex than a business application? It packs everything in
blobs!
> I think you see the
> similarites between the three-schema architecture and the rapid
> prototyping tool I described earlier. It is not a coincidence :-)
>
> Now think of this: *IF* set operations were supported by the
> programming language, wouldn't it be a convenient way of structuring
> your code (efficiency considerations aside)? Example: I want to update
> the salaries of all employees with a specific manager, or I want to
> see which projects an employee has worked on in the last month, or
> find the sum of all hours employees working for a specific manager has
> worked on a specific project. These are all problems which can be
> trivially solved using sets. No navigation or hard-coded links
> necessary, no need to create objects which maintain the relation
> links, no need to add new classes when you want to add a new relation
> between objects or when your relation changes from on-to-one to
> one-to-many or many-to many. This is taken care of by modyfying the
> integrity constraints of your schema. The inherent relations in your
> problem remains the same whether you prefer a solution with explicit
> links (the most typical for object-oriented solutions, in my
> experience), or a tabular organization, in which case you will most
> likely use the DBMS engine to do the bulk of the processing. One way
> of looking at the difference is that with a tabular organization the
> application is free (via set operations) to follow or update any
> thinkable relation, limited only by the integrity constraints, while
> in an object-oriented or network system, you will typically have
> materialized those relations you are interested in, and the
> constraints are implicit in your materialization.
True. But also, nothing prevents us (with MI) from providing a relational
view for containers. Comparison with Ada: the major problem with
Unbounded_String is that it does not implement the abstract array
interface. This prevents us from writing generic applications working for
both String and Unbounded_String.
Probably there is no ideal interface for all cases. But OO (or ADT) design
could simultaneously provide support for many views. It seems that vendors
of non-relational data bases have no great problems with implementing SQL
and ODBC for their products.
> But there clearly is a mismatch between the facilites provided by the
> RDBMS and your typical programming language, I am just unsure what is
> the best way to bridge that gap.
To take a look at the calendar! (:-))
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2004-12-09 14:03 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-24 12:31 Windows Ada database support Mark Doherty
2004-11-24 15:04 ` Marius Amado Alves
2004-11-24 18:35 ` Pascal Obry
2004-11-24 19:17 ` Alex R. Mosteo
2004-11-24 19:30 ` Dmitry A. Kazakov
2004-11-24 22:32 ` Ching Bon Lam
2004-11-25 1:03 ` David Botton
2004-11-25 17:50 ` Warren W. Gay VE3WWG
2004-11-26 9:15 ` Dmitry A. Kazakov
2004-11-26 18:36 ` David Botton
2004-11-27 8:59 ` Dmitry A. Kazakov
2004-11-28 0:46 ` David Botton
2004-11-28 9:51 ` Dmitry A. Kazakov
2004-11-28 10:23 ` Pascal Obry
2004-11-28 11:03 ` Dmitry A. Kazakov
2004-11-28 14:38 ` Martin Dowie
2004-11-28 16:51 ` Marius Amado Alves
2004-11-28 19:50 ` Martin Dowie
2004-11-28 20:49 ` Christopher Browne
2004-11-28 17:29 ` Dmitry A. Kazakov
2004-11-28 17:47 ` Marius Amado Alves
2004-11-28 18:56 ` Dmitry A. Kazakov
2004-12-06 14:57 ` Warren W. Gay VE3WWG
2004-11-28 18:45 ` Pascal Obry
2004-11-28 19:13 ` Dmitry A. Kazakov
2004-11-28 20:04 ` Pascal Obry
2004-11-29 9:04 ` Dmitry A. Kazakov
2004-11-29 10:07 ` Adrien Plisson
2004-11-29 11:00 ` Alex R. Mosteo
2004-11-29 13:12 ` Frank Piron
2004-12-01 16:19 ` Pascal Obry
2004-12-02 10:37 ` Marius Amado Alves
2004-12-02 10:58 ` Frank Piron
2004-12-03 2:50 ` John B. Matthews
2004-11-28 20:36 ` Marius Amado Alves
2004-11-29 1:40 ` Georg Bauhaus
2004-11-29 10:30 ` Marius Amado Alves
2004-11-29 1:28 ` Georg Bauhaus
2004-11-29 8:53 ` Dmitry A. Kazakov
2004-11-29 11:09 ` Georg Bauhaus
2004-11-29 12:01 ` Dmitry A. Kazakov
2004-11-29 14:07 ` Georg Bauhaus
2004-11-29 18:04 ` Dmitry A. Kazakov
2004-11-29 22:05 ` Georg Bauhaus
2004-11-30 11:00 ` Dmitry A. Kazakov
2004-11-30 13:46 ` Ole-Hjalmar Kristensen
2004-11-30 15:04 ` Dmitry A. Kazakov
2004-11-30 16:09 ` Georg Bauhaus
2004-11-30 16:07 ` Georg Bauhaus
2004-11-30 18:52 ` Dmitry A. Kazakov
2004-11-30 21:10 ` Georg Bauhaus
2004-12-01 9:11 ` Dmitry A. Kazakov
2004-11-29 12:56 ` Marius Amado Alves
2004-11-29 13:26 ` Dmitry A. Kazakov
2004-11-29 15:02 ` Frank Piron
2004-11-29 15:58 ` Marius Amado Alves
2004-11-29 18:16 ` Dmitry A. Kazakov
2004-11-30 7:14 ` Frank Piron
2004-12-06 14:48 ` Warren W. Gay VE3WWG
2004-12-06 16:29 ` Dmitry A. Kazakov
2004-12-06 17:52 ` Warren W. Gay VE3WWG
2004-12-06 19:44 ` Georg Bauhaus
2004-12-06 20:49 ` Dmitry A. Kazakov
2004-12-07 5:16 ` Warren W. Gay VE3WWG
2004-12-07 10:29 ` Dmitry A. Kazakov
2004-12-07 15:49 ` Georg Bauhaus
2004-12-07 21:29 ` Dmitry A. Kazakov
2004-12-08 2:24 ` Georg Bauhaus
2004-12-08 9:05 ` Dmitry A. Kazakov
2004-12-08 10:03 ` Ole-Hjalmar Kristensen
2004-12-08 10:56 ` Dmitry A. Kazakov
2004-12-08 11:19 ` Marius Amado Alves
2004-12-08 12:51 ` Frank Piron
2004-12-08 13:43 ` Dmitry A. Kazakov
2004-12-08 13:41 ` Dmitry A. Kazakov
2004-12-08 16:09 ` Georg Bauhaus
2004-12-08 19:46 ` Dmitry A. Kazakov
2004-12-09 12:20 ` Georg Bauhaus
2004-12-09 12:59 ` Dmitry A. Kazakov
2004-12-08 15:58 ` Georg Bauhaus
2004-12-08 19:43 ` Dmitry A. Kazakov
2004-12-09 11:58 ` Georg Bauhaus
2004-12-09 13:27 ` Dmitry A. Kazakov
2004-12-09 18:58 ` Georg Bauhaus
2004-12-10 10:22 ` Dmitry A. Kazakov
2004-12-10 14:28 ` Georg Bauhaus
2004-12-10 15:14 ` Dmitry A. Kazakov
2004-12-08 15:52 ` Georg Bauhaus
2004-12-08 20:22 ` Dmitry A. Kazakov
2004-12-09 12:12 ` Georg Bauhaus
2004-12-09 12:59 ` Dmitry A. Kazakov
2004-12-09 18:45 ` Georg Bauhaus
2004-12-09 12:22 ` Ole-Hjalmar Kristensen
2004-12-09 14:03 ` Dmitry A. Kazakov [this message]
2004-12-10 20:47 ` Simon Wright
2004-11-25 2:18 ` bubble
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox