database
Jim Herrmann
kclug at itdepends.com
Mon Apr 25 20:42:54 CDT 2005
Creative Commons baby!
Steven Danz wrote:
> Wow... you mind if I borrow this? I'll reference you of course. I
> used to do the DBA thing long ago, and I've been trying to explain
> some of these same things to some DB newbs, and just couldn't get it
> to come across this clearly.
>
> Thanks for your time.
>
> Steven
>
> Jim Herrmann wrote:
>
>> Tim,
>> It sounds like you are wanting to do a fairly simple database
>> structure, which is a good way to get started. When you say "open
>> database format", I assume that you are talking about a target
>> platform of a relational database, something like MySQL or Postgres.
>> Yes? But that's getting ahead of the design curve. Here's how to
>> proceed if you want to follow something akin to a formal database
>> design process. I've been doing this for about 18 years as a DBA. I
>> hope I'm not volunteering too much information. You said you were a
>> newb. :-)
>>
>> The first thing you need to do is create a logical model. When doing
>> a logical model use English business names, and not programming
>> abbreviations. Identify all the *Entities* that you need to
>> represent, and the *Relationships* between those entities. A entity
>> is a singular noun, which would include things like "Person",
>> "Department", or in your case, "Reminder". A relationship is a verb
>> phrase like "has many", "has one", or "has zero or many". So, you
>> can say something like "a Department has many Persons" and "a
>> Department has one and only one Manager".
>>
>> Once you have this, you can create an Entity-Relationship (ER)
>> diagram. This gives you a very high level view of your data
>> structure. This would be a box for each entity and a line between
>> the boxes represents a relationship. Exactly what the box and line
>> looks like depends on the modeling tool you use. Then you need to
>> identify all the attributes (fields) for each entity. You need to
>> identify which attributes uniquely identify an occurrence (row) of
>> that entity, and that's your natural key. Keys of parents, of a
>> relationship, migrate to the children. If the parent is required for
>> a child to exist, then it is an "identifying" relationship, and and
>> the parent's keys become part of the child's keys. If it is a
>> "non-identifying" relationship, then some or all of the parent key is
>> NOT part of the child's key. Now, if you find an attribute occurs
>> multiple times in an entity, then you should "normalize" those
>> attributes into another entity or entities. There are several levels
>> of normalization, and I won't get into it here as it would be a full
>> day class, but third normal form is considered the best level of
>> normalization for most DB designs. That's where each attribute of
>> each entity is dependent upon the key, the whole key, and nothing but
>> the key, so help me Codd. (E.F. Codd, an IBM fellow, created
>> relational database theory.) :-)
>>
>> Once you have a fully attributed ER diagram, you are ready to create
>> a physical model based on the logical model you created. This is
>> where you create names that you want to use in your program, as you
>> turn entities into *tables* and attributes become *columns* and
>> relationships become *foreign keys*. You might shorten "Department"
>> to "DEPT", for example. It's best if you use standard abbreviations,
>> meaning be consistent, as much as possible. It makes programming
>> much easier. The length of table and column names may need to be
>> shortened, depending on the target database. That's part of the
>> physical design process. You also need to decide what indexes will
>> be on your tables. Some for uniqueness, such as on the key, and some
>> for performance, depending on how you are going to access your data.
>>
>> There are also performance and convenience tricks that you can do
>> when you take your model physical. For example, if you have some
>> natural keys that have lots of columns, you might introduce
>> artificial keys, which would be something like an integer or reverse
>> timestamp. You may also at this point decide to "denormalise" some
>> entities to make your system go faster, but that comes at a price of
>> maintaining redundant data, and it breaks Codd's rule. Depending on
>> the DB platform, there are lots of physical implementation issues to
>> consider, if you are building something with lots of data or lots of
>> transactions, but you probably don't need to concern yourself with
>> all that for this project.
>>
>> Hopefully you find this information helpful. If you have any further
>> questions about data base, I'd be glad to help. Sorry about the
>> brain dump. ;-)
>>
>> Enjoy,
>> Jim
>>
>> Tim reid wrote:
>>
>>> I'm thinking of programing/writing/whatever a database to keep track
>>> of some information for work. I think that I would like to keep track
>>> of 7-12 fields of information, and be able to set up reminders that
>>> are tagged to date information. For instance, "you did such and such
>>> 30 days ago...you can now file the claim, here is the information that
>>> you recorded earlier."
>>>
>>> How would i go about doing this, free as in beer, in an open database
>>> format? Let me also mention that I'm a total newb ;)
>>>
>>> TIA,
>>>
>>> Tim
>>>
>>>
>>>
>>
>
>
>
--
Progressive Values ARE American Values
Responsibility, Empathy, Freedom, Opportunity, Prosperity, Fairness,
Trust, Honesty, Open Communication, Community, Cooperation
http://musicalprogress.org/
More information about the Kclug
mailing list