Quote:
|
Normalisation is usually the key to any database design but whether it's sensible to redesign your entire database and all the code that goes around it without any clear idea of what benefits to expect is another question.
|
And I've explained the benefits that I'm quite certain I will receive... A couple of times now, actually.
Quote:
|
Normalisation in itself isn't a benefit, it's just a process that will hopefully make your database easier to maintain.
|
This is nothing I don't already know.
Quote:
|
Have you looked into how much your new design will cost to implement and what the ROI might be?
|
I'm the only person who will be working on this. I'm salaried. I'm also underworked. I have no additional hardware or software costs to do this. Front end code, I'm quite familiar with and can write without difficulty. Thus, the cost can pretty easily be calculated as MyPayRate*TheTimeISpendWorkingOnIt, and then only if it's time I would have spent doing something else anyway (See: underworked).
The return will be that it will be vastly easier for me to maintain it. It will be easier for me to make additions, it will be easier for me to generate accurate reports. I won't have to spend a lot of time wondering if anyone in data entry flubbed something.
It will also shave a vast amount of time off of the data entry process. As a rough estimate, I would say something between 5 and 10 man-hours... daily. We have half a dozen employees who do nothing but take orders and enter them all day. It's a grossly time consuming process at present.
So, here's my problem:
This database sucks. It "works", but the data is unreliable and the data entry is prohibitively time consuming. There is no metric by which fixing it is not a genuine
need. Having made that determination, I may as well truly fix the thing instead of putting in a bunch of shortcuts that will likely need more fixing two years down the road. As I said before, I could fairly trivially redesign it to yield the benefits I want, but if I'm going to take the "redesign" step, why half-ass it if I don't need to?
Quote:
|
Asking us to agree with your design while not telling us what the database is to hold seems unbelievable to me but here's a link that provides lot's of useful normalised databases you could perhaps use.
|
I'm not asking anyone to agree with a design. I'm providing an example and asking for your opinion about how you would handle that hypothetical information. I'm not sure what you find offensive about that. I'm not saying, "Hey, design my database for me.... but you can't know what's going to be in it, so put on that blindfold and throw some darts at it!"
I know the examples I've given to be logically analogous to the problem I'm working on. I am also capable of translating a solution that works for a hypothetical dataset to work for another, analogous dataset. Fear not, if I fumble that process somehow, or discover that my analogy was flawed, I won't blame anyone for giving me a bad design.
It's actually very important to me that I
do understand these design processes
in the abstract, and not just as they relate to my current dilemma.
Quote:
|
I guess I could counter by asking what you'd have to do to find how many of your shoes have steel toe caps (let's say this is a new requirement) - you'd have to add a new type table for toe caps, then add a field into your shoe table, then update your input screens to use this field, then populate the data for all your shoes and then finally write some SQL to join the tables and produce a total. Using the simple description field alone means you just have to write the SQL. Sure it's not rigorous but then nor is the world you're modelling.
|
Er... you're making an unfair comparison. You're saying I'd have to create new tables and fields and SQL and do a bunch of data entry on the one side, but not on the other. You're right about the fields and tables and SQL...
...but, if at some point in the future I need to know how many steel-toe caps there were, when I never needed to before... why would that information be contained within a description field? It wouldn't. If I don't care about that information right now, I don't care about it right now regardless of whether dataentry consists of a description, or perfectly delimited option sets.
I would not, then, have to *just* write the SQL - it's still new information that we never cared about before, but now we do. We'd STILL have to update every description of every specification - a data entry process that will itself be very much more arduous and error-prone than creating a new table, populating it, and linking it.
Quote:
|
Normalisation or overdesign? if the existing database works and your new design will be both more expensive and more complicated while providing no real benefits other than being normalised then I'm afraid I'd say it's over designed
|
Am I missing something? Is data entry that is both fast, efficient, and reliable not a real benefit?
Trust me: I am a card-carrying member of the, "If it ain't broke, don't fix it" school of thought.
To use another analogy, though, let's say you had a car. A run down, beat up, POS that gets 5 miles to a gallon and burns through oil like it is its job. It has no radio, it has no AC, and one of the taillights is broken. It still runs, sure, and it will get you from Point A to Point B, which is its primary purpose... but it is clearly at a point where even "If it isn't broken, don't fix it" is no longer applicable.
I've been maintaining this database for about 5 years now - it's at that point.
I'm not entirely certain how extreme I have to be with the redesign - that's what this is really about. Whether or not it needs a redesign isn't really a question. It does, and has for some time and, honestly, I'd have done it sooner if it wasn't a rather daunting task. It has been annoying, frustrating, and otherwise wasting my time (and the time of everyone else who works here) for the last 5 years.
I assure you, the motivation for doing a redesign is very worthwhile, and it's not simply an academic concern. This is about the degree of redesign necessary - not whether or not to do one.
I would, however, like to thank you for the link. As I said, it is important to me that I understand this in the abstract, and I reckon that link will help substantially.