If I may ask a few philosophical questions and get some of your collective wisdom., thank you.

A few thoughts as setup for the questions first.

Base is:
- a desktop database manager
- a database front end / BI (reports for those that don't like buzzwords) design tool
- a GUI based IDE
- a GUI based rich client

The target audience ( user ) of the Base application as a database development tool is:
- unlikely to have a strong database background
- unlikely to have a software development background
- likely to have some experience with word processor and spread sheet applications

Alright, I think that list is acceptable to most of us.

After a small hiatus I am getting back to helping work on the "Mid Level Tutorial" that I've mentioned before. Specifically the development of the actual database application that professor Casanova has described in the text of the tutorial. As part of that work, he has put together a UML diagram describing the data schema, along with mock screen and report layouts.

The first step of course is to turn the UML diagram into an actual physical schema - and - therein is the question.

Back in the good old days we had some real constrains on names, table names, column names and the like. Some most likely remember the old 8 character limits imposed by some early RDBMS, even the big name ones. But those days are long gone

Many of us are use to the idea of a virtual data model and a physical data model - meat and potatoes, if you will, of the DBA and data modeler. But DBAs and data modelers are not the expected users of the Base application in general and certainly not the target reader of a mid level tutorial. Others of us are experienced database application developers ( business applications in other words ) and are used to data dictionaries, one use of which is to help map those often near cryptic physical column names back to the descriptive name used when the virtual ( business level ) design was done.

( as an aside - who has actually gone ahead and written that script to produce a data dictionary from a hsqldb Base database...come on you know we've all been meaning to get to it sooner or later - who wants to share? ;> )

OK - all that is to get this. Looking at the conceptual design reflected in the UML diagram I see lots of quite descriptive column names. I can do the normal, and comfortable, step of changing these to something less so - or - and this is where I am leaning, leaving them just as they are. Long, multi word phrases and verbose.

Let me tell you why - because if you are using point and click, drag and drop and wizard driven development tools it doesn't really matter and for the target user probably makes life easier.

Case in point - the database includes a table 'Assignment', simply creating a script to build the physical table to match the the UML diagram would give this:

CREATE TABLE "Assignment" (
"Assignment ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"Patient ID" INTEGER NOT NULL,
"Therapist ID" INTEGER NOT NULL,
"Date assigned" DATE DEFAULT CURRENT_DATE NOT NULL,
"Date case closed" DATE,
CONSTRAINT FK_PAT_ASMT FOREIGN KEY ("Patient ID") REFERENCES "Patient" ("ID Number"), CONSTRAINT FK_THP_ASMT FOREIGN KEY ("Therapist ID") REFERENCES "Therapist" ("ID Number"),
CONSTRAINT CK_CLOSE_DT CHECK( "Date case closed" >= "Date assigned" )
);


As I say, verbose column names indeed. But when you use the form wizard against that table you get nice meaningful labels. Same for reports. None of that, run the wizard now go back and select each label and change the string from, for example, "DateClosed" to "Date case closed" - no need, it's much more likely the form is 'as desired' when the wizard is finished then not.

A few days ago Villeroy said that he doesn't use the GUI query designer - he prefers to type in the SQL commands directly - for him then those column names would be a pain in the rump IMO. But again, I think not using the GUI tools must be looked at as the great exception with regards to the target users. The average Base user is going to use the GUI query designer, the same for the report creation tools. In report builder, drag that column onto the report and there you go - no extra edit to the label is needed.

So for the moment this is exactly what I have done for the database to be included with the tutorial - but believe some would disagree, so if you do tell me why, please.

Another case. Lookup lists - again we all know that it is best to use lookup tables right - not to put hard coded lists in the properties of the list control. Well, yes I agree of course, in principle. I think it again must be viewed from the typical target user.

Here is the therapist table:

CREATE TABLE "Therapist" (
"ID Number" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"First Name" VARCHAR(50) NOT NULL,
"Surname" VARCHAR(50) NOT NULL,
"Gender" BOOLEAN NOT NULL,
"Date of Birth" DATE,
"Street and number" VARCHAR(200),
"City" VARCHAR(100),
"Postal code" VARCHAR(15),
"State" CHAR(2),
"Tax number" VARCHAR(40),
"Academic degree" VARCHAR(40),
"License number" VARCHAR(40),
"Hiring date" DATE NOT NULL,
"Termination date" DATE,
CONSTRAINT "CK_TERM_DT" CHECK( "Termination date" > "Hiring date" )
);

Specifically Gender and State - In the case Gender professor Casanova having learned from his research realized that this could be a boolean field ( Male = TRUE, Female = FALSE or perhaps vice versa would be more PC for the OOo world, where it seems all users are female when mentioned in discussions) and then use radio buttons for the form UI. Fair enough, we have probably all done that at one time or another. But IMO for our target user it is better practice to handle these types of fields, really an enumerative type, as the string we would want represented. So in this case a divergence from his design and this table structure instead

CREATE TABLE "Therapist" (
"ID Number" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
"First Name" VARCHAR(50) NOT NULL,
"Surname" VARCHAR(50) NOT NULL,
"Gender" CHAR(6) NOT NULL,
"Date of Birth" DATE,
"Street and number" VARCHAR(200),
"City" VARCHAR(100),
"Postal code" VARCHAR(15),
"State" CHAR(2),
"Tax number" VARCHAR(40),
"Academic degree" VARCHAR(40),
"License number" VARCHAR(40),
"Hiring date" DATE NOT NULL,
"Termination date" DATE,
CONSTRAINT CK_THP_GNDR CHECK( "Gender" in ( 'Male', 'Female' ) ),
CONSTRAINT CK_TERM_DT CHECK( "Termination date" > "Hiring date" ),
CONSTRAINT CK_ST_CASE CHECK( "State" = UCASE("State" ) )
);


Why? Well, for one thing it will save the user from having to use a IF statement in either a query or as part of a report function to get that string for display.

Also notice that there is no FK relation for the State field. Once again a decision based on the target user or more precisely the target use. In this situation it makes sense to me to expect that this will be a relatively small number of values ( remembering that the target user is most likely building this for personal or personal work group use). So that the best way to handle data validation is simply to use a combo box on any input form with a data source command of "SELECT "State", "State" FROM "Therapist", offering quick entry of redundant data, easily added new values and consistent case with check constraint. Another way to look at that is that this use of the combo box with a self referencing select statement should be similar to the data input experience of most spread sheet users.

But - do any of you think that is a bad thing for a tutorial to show - should a tutorial instead stick to look up tables for this type of thing?

Anyway - if you read along this far - thanks for your time - and thanks for comments you might want to toss my way on any of this - think of it as 'Best practices'. What would you NOT want to be showing users or conversely what would you think particularly important to pass along.

Thanks

Drew



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to