Tải bản đầy đủ (.pdf) (5 trang)

SQL PROGRAMMING STYLE- P9 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (108.11 KB, 5 trang )


9.6 Your First Attempts Need Special Handling 177

GROUP BY P1.name, P1.gender;

This will put one person per row with a ranking in the alphabetical
sort for their gender rather than one couple per row, but that is still the
same information from a simpler query. Notice that both solutions can
leave unpaired people toward the end of the alphabet.
You can add an ORDER BY clause to the cursor that passes the result
set to the front-end program in a simple client/server system, but in
architectures with multiple tiers, sorting and other display functions
might be performed differently in several places. For example, the same
data is displayed in English units sorted by division in the United States
but displayed in SI units sorted by country in Europe.

9.6 Your First Attempts Need Special Handling

Henry Ledgard (1976) put it very nicely:
Pruning and restoring a blighted tree is almost an impossible
task. The same is true of blighted computer programs.
Restoring a structure that has been distorted by patches and
deletions, or fixing a program with a seriously weak algorithm
isn’t worth the time. The best that can result is a long,
inefficient, unintelligible program that defies maintenance. The
worst that could result, we dare not think of.
This is especially true with SQL, but how to handle restarts in DDL
and DML is different because of the declarative nature of the two
sublanguages. DDL execution is static once it is put into place, whereas
DML is dynamic. That is, if I issue the same CREATE <schema object>
command, it will have the same results each time, but if I issue the same


SELECT, INSERT, UPDATE, or DELETE, the execution plan could
change each time.

9.6.1 Do Not Be Afraid to Throw Away Your First
Attempts at DDL

Bad DDL will distort all of the code based on it. Just consider our little
“Dance Partner” schema: What if a proprietary BIT data type had been
used for gender? The code would not port to other SQL dialects. The
host languages would have to handle low-level bit manipulation. It
would not interface with other data sources that use ISO standards.

178 CHAPTER 9: HEURISTICS

Designing a schema is hard work. It is unlikely that you will get it
completely right in one afternoon. Rebuilding a database will take time
and require fixing existing data, but the other choices are worse.
When I lived in Salt Lake City, Utah, a programmer I met at a user
group meeting had gotten into this situation: The existing database was
falling apart as the workload increased thanks to poor design at the start.
The updates and insertions for a day’s work were taking almost 24 hours
at that time, and the approaching disaster was obvious to the
programmers. Management had no real solution, except to yell at the
programmers. They used the database to send medical laboratory results
to hospitals and doctors.
A few months later, I got to see how an improperly declared column
resulted in the wrong quantities of medical supplies being shipped to an
African disaster area. The programmer tried to save a little space by
violating first normal form by putting the package sizes into one column
and pulling them out with SUBSTRING() operations. The suppliers later

agreed to package smaller quantities to help with the fantastic expense of
shipping to a war zone. Now the first “subfield” in the quantity column
was one unit and not five, but the tightly coupled front did not know
this. Would you like to pick which four children will die because of
sloppy programming? See what we mean by the last sentence in
Ledgard’s quote?

9.6.2 Save Your First Attempts at DML

Bad DML can run several orders of magnitude slower than good DML.
The bad news is that it is difficult to tell what is good and what is bad in
SQL. The procedural programmers had a deterministic environment in
which the same program ran the same way every time. SQL decides how
to execute a query based on statistics about the data and the resources
available. They can and do change over time. Thus, what was the best
solution today could be the poorer solution tomorrow.
In 1988, Pascal (1988) published a classic article on PC database
systems at the time. Pascal constructed seven logical equivalent queries
for a database. Both the database and the query set were simple and were
run on the same hardware platform to get timings.
The Ingres optimizer was smart enough to find the equivalence, used
the same execution plan, and gave the best performance for all queries.
The other products at the time gave uneven performances. The worst
timing was an order of magnitude or more than the best. In the case of
Oracle, the worst timing was more than 600 times the best.

9.8 Draw Circles and Set Diagrams 179

I recommend that you save your working attempts so that you can
reuse them when the world and/or your optimizer change. The second

example for the “Dance Partner” in section 9.5 does a nice job of
illustrating this heuristic. Put the code for one of the queries in as a
comment, so the maintenance programmer can find it.

9.7 Do Not Think with Boxes and Arrows

This is going to sound absolutely insane, but some of us like to doodle
when we are trying to solve a problem. Even an informal diagram can be
a great conceptual help, especially when you are learning something
new. We are visual creatures.
The procedural programmers had the original ANSI X3.5 Flowchart
symbols as an aid to their programming. This standard was a first crude
attempt at a visual tool that became Structure Charts and Data Flow
Diagrams (DFD) in the 1970s. All of these tools are based on “boxes and
arrows”—they show the flow of data and/or control in a procedural
system. If you use the old tools, you will tend to build the old systems.
You might write the code in SQL, but the design will tend toward the
procedural.

9.8 Draw Circles and Set Diagrams

If you use set-oriented diagrams, you will tend to produce set-oriented
solutions. For example, draw a GROUP BY as small, disjointed circles
inside a larger containing circle so you see them as subsets of a set. Use a
time line to model temporal queries. In a set-oriented model, nothing
flows; it exists in a state defined by constraints.
Probably the clearest example of “boxes and arrows” versus “set
diagrams” is the Adjacency List model versus the Nested Sets model for
trees. You can Google these models or buy a copy of my book


Trees and
Hierarchies in SQL



for Smarties

for details. The diagrams for each
approach are shown in Figure 9.1.

Figure 9.1

Adjacency list
versus Nested Set
Trees.

180 CHAPTER 9: HEURISTICS

9.9 Learn Your Dialect

Although you should always try to write Standard SQL, it is also
important to know which constructs your particular dialect and release
favor. For example, constructing indexes and keys is important in older
products that are based on sequential file structures. At the other
extreme, the Nucleus engine from Sand Technology represents the entire
database as a set of compressed bit vectors and has no indexing because
in effect everything is automatically indexed.

9.10 Imagine That Your WHERE Clause Is “Super Ameba”


That is the weirdest title in this chapter, so bear with me. Your “Super
Ameba” computer can split off a new processor at will, and assign it a
task, in a massively parallel fashion. Imagine that every row in the
working table that was built in the FROM clause is allocated one of these
“ameba processors” that will test the WHERE clause search condition on
just that row. This is a version of Pournelle’s rule: “one task, one
processor.”
If every row in your table can be independently tested against simple,
basic search conditions, then your schema is probably a good relational
design. But if your row needs to reference other rows in the same table,
consult an outside source, or cannot answer those simple questions,
then you probably have some kind of normalization problems.
You have already seen the Nested Sets model and the Adjacency List
model for trees. Given one row in isolation from the rest of the table, can
you answer a basic node question about the tree being modeled? This
leads to asking: What are basic questions? Here is a short list that applies
to trees in graph theory.
1. Is this a leaf node?
2. Is this the root node?
3. How big is the subtree rooted at this node?
4. Given a second node in the same tree, is this node superior,
subordinate, or at the same level as my node?
Question 4 is particularly important, because it is the basic
comparison operation for hierarchies. As you can see, the Nested Sets
model can answer all of these questions and more, whereas the
Adjacency List model can answer none of them.

9.11 Use the Newsgroups and Internet 181

9.11 Use the Newsgroups and Internet


The Internet is the greatest resource in the world, so learn to use it. You
can find a whole range of newsgroups devoted to your particular product
or to more general topics. When you ask a question on a newsgroup,
please post DDL, so that people do not have to guess what the keys,
constraints, Declarative Referential Integrity, data types, and so forth in
your schema are. Sample data is also a good idea, along with clear
specifications that explain the results you wanted.
Most SQL products have a tool that will spit out DDL in one
keystroke. Unfortunately, the output of these tools is generally less than
human-readable. You should prune the real tables down to just what is
needed to demonstrate your problem: There is no sense in posting a 100-
column CREATE TABLE statement when all you want is two columns.
Then clean up the constraints and other things in the output using the
rules given in this book. You are asking people to do your job for you for
free. At least be polite enough to provide them with sufficient
information.
If you are a student asking people to do your homework for you,
please be advised that presenting the work of other people as your own is
a valid reason for expulsion and/or failure at a university. When you
post, announce that this is homework, the name of your school, your
class, and your professor. This will let people verify that your actions are
allowed.

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×