tl;dr version: We've got an access control database that stores some user details and access rights to various web apps. We need a brand new fault reporting system which will store users, hardware, and fault details. My manager wants to mash the new fault reporting data into the existing access control database. Is it better to have two separate databases for two completely separate functions/systems, even though there'd be a (slight) overlap of information?
Full blown essay:Hi all,
I've got a question about the design of a database. Well, I need to know what the "best practice" is in my situation, and why that's the case really.
Anyway, currently we have a database that contains some basic user information (login details an such) and information on our websites and restricted webpages. The database was designed, and is solely used, for maintaining access control over our websites. It basically determines who can access our various websites and apps.
Although the database contains some user information, it isn't used as an up-to-date definitive list of users, because some of our employees don't actually need to login to anything web-related and so won't be listed in the database; and we also have external people (not employed by us) that
do need access to our websites, and so they
are listed, even though they don't technically belong to our company.
I've been tasked with replacing a separate system - our fault reporting system - and it too includes storing information about our users, plus the various bits of hardware we have (PCs, monitors, etc) as well as details of all the fault calls that we receive.
When designing the database for the fault reporting system, someone pointed out that we already had a database (our access control database) that contains user details, and that that would be a good place to start. The project leader then decided that we should adapt this database to include all of the things that the fault reporting system needs, including extra user details, hardware details, and all of the fault call details.
So what we'll end up with is a database that will not only store access rights like it does at the moment, but will include all of the user, hardware, and fault information as well.
My gut feeling about this situation is that we're doing it all wrong. In my opinion, the Access Control database should be left as is, because its sole purpose is to control who can access what. I want to build a separate database for the fault reporting system; one that will actually be used to store up-to-date details for all of our users, hardware, and faults.
The advantages of adapting our Access Control database to include the fault reporting data is that we already have a table that has got most of our user details in it. We'll need to add some extra fields to it, but it's there. This, in my manager's opinion, will probably save time, and as always, saving time and/or money is the number one priority. It also means we'll only have one place that stores user info, rather than having two places, which is what we'd have if we made a separate database.
The cons, as far as I can see, are that we have an existing web interface to alter the data in the Access Control database, and it'll take time to see if altering the table structures (and adding new tables) will affect the web apps in any way. Another disadvantage is that I don't know if the data we wish to add to the database will affect the current relationships of the existing tables. If it does, that'll affect the web apps we have as well.
I know that having the same information stored in two places isn't a great idea, but there's nothing to stop us from building a web app that, when it alters data on the fault reporting system, it updates the necessary data on the access control database as well. We've already decided to build a new UI for the fault reporting system, so the work can be done.
I basically need a list of reasons why we should adapt an existing database to store fault reporting details, and a list of reasons why we should build a new database to store the fault details. From that we can decide which way to go.
Thanks!
