From: fireball on
I hope I can express my question..:
I need to confront, how data structure complexity implies the cost of
coding/maintenance application based on it.

It's because I need to argue my principal, he need to focus more on database
structure _before we start coding functionalities. Because of deadlines,
there is a suggesion, we can simplify database structers after we start
writting application. I suggest there is numerously more mony to do so.

Any articels, charts, or expert statemets on subject? :)



From: H. S. Lahman on
Responding to Fireball...

> I need to confront, how data structure complexity implies the cost of
> coding/maintenance application based on it.

First, I am assuming that because of the forum you chose you are doing
OO development. Application partitioning is an important feature of the
OO paradigm and one usually wants to separate the concerns of
persistence from those of the customer problem. (For example, see the
Application Partitioning category on my blog.)

Second, I am assuming that you are not doing CRUD/USER processing where
the application is simply a pipeline converting between the RDB view and
the UI view of the data. In that sort of processing one does design the
data structures (schemas) first because the RAD IDEs and "canned"
layered model infrastructures are abstracted around the RDB view of
things (tables & tuples). IOW, the supporting tools are /designed/ to
migrate the RDB view to the UI view so they work best that way.

> It's because I need to argue my principal, he need to focus more on database
> structure _before we start coding functionalities. Because of deadlines,
> there is a suggesion, we can simplify database structers after we start
> writting application. I suggest there is numerously more mony to do so.

If one is not doing CRUD/USER processing, then one wants to solve the
customer problem first before worrying about how the data that the
solution needs is persisted. That's because the problem solution will be
complicated enough so that one does not want to be distracted by
persistence issues and because that solution really doesn't care how the
data is stored (RDB, OODB, flat files, clay tablets, etc.).

An OO problem solution is highly tailored to the problem in hand. That
means that the data structures (e.g., objects) will be defined to
optimize the solution. In contrast, most data storage mechanisms are
designed to provide storage that is independent of particular problems.
In fact, the entire relational data model that underlies RDBs is
designed around problem-independence. So when solving complex problems
one /expects/ the solution and persistence views of the data to be
different.

So one typically isolates the persistence access in a subsystem that is
constructed after the rest of the problem is solved. The interface to
that subsystem is based on the problem solution's needs for data and the
subsystem exists to convert between the solution view and the
persistence view. Then, given that the views are decoupled, it becomes
relatively easy to design the persistence view (e.g., RDB schema) that
works best.


*************
There is nothing wrong with me that could
not be cured by a capful of Drano.

H. S. Lahman
hsl(a)pathfindermda.com
Pathfinder Solutions
http://www.pathfindermda.com
blog: http://pathfinderpeople.blogs.com/hslahman
"Model-Based Translation: The Next Step in Agile Development". Email
info(a)pathfindermda.com for your copy.
Pathfinder is hiring:
http://www.pathfindermda.com/about_us/careers_pos3.php.
(888)OOA-PATH



From: topmind on

H. S. Lahman wrote:
> Responding to Fireball...
>
> > I need to confront, how data structure complexity implies the cost of
> > coding/maintenance application based on it.
>
> First, I am assuming that because of the forum you chose you are doing
> OO development. Application partitioning is an important feature of the
> OO paradigm and one usually wants to separate the concerns of
> persistence from those of the customer problem. (For example, see the
> Application Partitioning category on my blog.)

Goddamit! RDBMS are NOT just about persistence. That is a fricken
fable! They are semi-standardized attribute and relationship managers.
Persisistence is one of many features they offer. Many OO'ers prefer
to roll-your-own a-and-r manager, but that is often wastful and bad
"reuse".

>
> Second, I am assuming that you are not doing CRUD/USER processing where
> the application is simply a pipeline converting between the RDB view and
> the UI view of the data. In that sort of processing one does design the
> data structures (schemas) first because the RAD IDEs and "canned"
> layered model infrastructures are abstracted around the RDB view of
> things (tables & tuples). IOW, the supporting tools are /designed/ to
> migrate the RDB view to the UI view so they work best that way.
>
> > It's because I need to argue my principal, he need to focus more on database
> > structure _before we start coding functionalities. Because of deadlines,
> > there is a suggesion, we can simplify database structers after we start
> > writting application. I suggest there is numerously more mony to do so.
>
> If one is not doing CRUD/USER processing, then one wants to solve the
> customer problem first before worrying about how the data that the
> solution needs is persisted. That's because the problem solution will be
> complicated enough so that one does not want to be distracted by
> persistence issues and because that solution really doesn't care how the
> data is stored (RDB, OODB, flat files, clay tablets, etc.).
>
> An OO problem solution is highly tailored to the problem in hand. That
> means that the data structures (e.g., objects) will be defined to
> optimize the solution. In contrast, most data storage mechanisms are
> designed to provide storage that is independent of particular problems.
> In fact, the entire relational data model that underlies RDBs is
> designed around problem-independence. So when solving complex problems
> one /expects/ the solution and persistence views of the data to be
> different.

This is mostly unproven bullshit. I don't have to tolerate these
fables. How the hell are navigational (OO) structures more "optimized
for the solution" than relational? How are you measuring? Subjective
feelings? Bzzzzzt! Those don't count here.

>
> So one typically isolates the persistence access in a subsystem that is
> constructed after the rest of the problem is solved. The interface to
> that subsystem is based on the problem solution's needs for data and the
> subsystem exists to convert between the solution view and the
> persistence view. Then, given that the views are decoupled, it becomes
> relatively easy to design the persistence view (e.g., RDB schema) that
> works best.
>
>
> *************
> There is nothing wrong with me that could
> not be cured by a capful of Drano.
>
> H. S. Lahman

-T-
oop.ismad.com

From: JXStern on
On 23 Feb 2007 12:06:06 -0800, "topmind" <topmind(a)technologist.com>
wrote:

Let me agree and expand.

>Goddamit! RDBMS are NOT just about persistence. That is a fricken
>fable! They are semi-standardized attribute and relationship managers.
>Persisistence is one of many features they offer. Many OO'ers prefer
>to roll-your-own a-and-r manager, but that is often wastful and bad
>"reuse".

A database is an a&r manager like a compiler is a text processor.
That is, a database is more than an a&r manager, it is a data model
manager, like a compiler is a program translator. OO'rs generally are
happy to use existing compilers, but inexplicably want to grow their
own DBMS's, or degrade their use of an RDBMS to little more than a
text editor with a load and save mechanism.

>This is mostly unproven bullshit. I don't have to tolerate these
>fables. How the hell are navigational (OO) structures more "optimized
>for the solution" than relational? How are you measuring? Subjective
>feelings? Bzzzzzt! Those don't count here.

Well, it's a double fable. Most OO code today uses one or another
gigantic framework of GUI/page management, yet OO'rs continue to view
their work as producing customized components on a blank page rather
than an assembly and manipulator of the framework. They then fail to
view nonprocedural SQL or stored procedure work in the same light.

I dunno, apparently people's brains just aren't big enough to hold the
two paradigms closely enough to understand the parallels. Massive and
repeated reinvention of the wheel results, with most of the efforts
coming up with stuff that is less than exactly round.

Heck, my current gig, I just discovered they assembled their servers
on 100% RAID5 storage, talk about not appreciating anything but the
grossest parameters of "persistence"!

J.


From: Daniel Parker on
On Feb 23, 1:31 pm, "H. S. Lahman" <h.lah...(a)verizon.net> wrote:
>
> So one typically isolates the persistence access in a subsystem that is
> constructed after the rest of the problem is solved. The interface to
> that subsystem is based on the problem solution's needs for data and the
> subsystem exists to convert between the solution view and the
> persistence view. Then, given that the views are decoupled, it becomes
> relatively easy to design the persistence view (e.g., RDB schema) that
> works best.

I have to concur with Topmind's and JXStern's comments. It's bad
advise, in general, to build up a complete representation of data in
the application's space, with code, along the lines suggested here.
The RDBMS is a tool for managing data access. It goes far beyond
persistence, it's scalable and fault tolerant in the way that many
home grown approaches are not, and provides a logic based querying
capability that is richer than the typical home grown code based
filter. Managing large amounts of state in the application is not
usually a good idea, there are tools for that. Generally speaking,
the idea in software assembly these days is to leverage tools, where
appropriate.

Best regards,
Daniel