S
Smithers
I have a *potential* client that has an MS Access-based OLTP application.
They currently have two .mdb files - one for the data that lives on a file
server, and another .mdb file on each client workstation that contains the
forms, reports, queries, and modules. They are planning to migrate the data
to SQL Server but keep forms etc as a MS Access client application.
The reason they want to migrate the data to SQL Server is specifically to
enhanse performance.
A few years ago this application had supported about 10 users and now it's
close to 120 users. IMO, the performance issues aren't necessarily due to
the size of the database (under 1GB) or number of concurrent users -
although that's obviously a bit much for MS Access. The real problem is the
fundamental design of the database - which contains many tables that are
more or less denormalized. The in-house developer apparently believed and
continues to believe that tables *must* (and can only...) directly reflect
the UI they are supporting. There is really no concept of separating the
data structures (DDL) from the presentation (i.e., no DAL in the middle).
Duplicate data and similarly expected problems are prevalent.
The in-house developer believes, and has told his management, that simply
moving the data from Access to SQL Server will improve performance
significantly. They do not have the budget or in-house technical resources
to completely rewrite the system which, IMO, is going to be necessary sooner
or later. For now they are hoping that moving the data to SQL Server and
"throwing hardware at it" will be good enough to result in acceptable
performance - without any attempt to get rid of the MS Access front end or
any significant redesign of the database. And yes, they already have
reasonably good indexes in their tables - meaning that their current
performance is about the best they can possibly have unless they do a major
redesign and rewrite.
I need to be able to talk in specific terms with the management and in-house
technical staff about the pros and cons of their plans. While I can talk
about the db design issues and application architecture, I've never dealt
with an Access client to a SQL Server db because I always thought it was
simply a bad practice from the beginning and never really thought through it
much less actually worked with that scenario...
thus I have a few questions:
1. I am wondering what the biggest technical issues are (i.e. reasons doing
this is a bad idea). Does this arrangement (Access client to SQL Server db)
fail to make use of SQL Server's available locking and other concurrency
mechanisms? Does this scenario basically result in a [file server
architecture] with queries processed on the client and not on the server
(because MS Access is at the front end)? What else?
2. What can we do to move processing to the server and out of the MS Access
client? Stored procedures are not an option, I believe, if/when an MS Access
form is bound to a query or table (current prevalent scenario in their db).
I'm sure reports can be generated from stored procedures just fine and
therefore processing for reports moved to the server; but what about the
data entry forms which are bound to tables and/or queries? Stored procedures
are not an option there, so what about views? Can MS Access forms be bound
to SQL Server views? How about bound directly to SQL Server tables? What can
I tell them specifically is wrong, in technical terms, with binding an MS
Access form directly to a SQL Server table?
3. What other "gotchas" are lurking that I might not be aware of? I would
think there would be many - but I'd appreciate a few of the important ones.
I'd like to dodge this bullet altogether but I'm considering getting
involved because I need the money. Even so... I will refuse get involved in
a situation where my reputation is likely to get hurt if it's a totally
impossible situation from the start (i.e. we could get the back end
converted and still realize little or no performance improvement). Is this
scenario a dead-end to begin with given their desire to *not* address the
fundamental design flaws and rewrite the application and redesign the
database?
Thanks!
They currently have two .mdb files - one for the data that lives on a file
server, and another .mdb file on each client workstation that contains the
forms, reports, queries, and modules. They are planning to migrate the data
to SQL Server but keep forms etc as a MS Access client application.
The reason they want to migrate the data to SQL Server is specifically to
enhanse performance.
A few years ago this application had supported about 10 users and now it's
close to 120 users. IMO, the performance issues aren't necessarily due to
the size of the database (under 1GB) or number of concurrent users -
although that's obviously a bit much for MS Access. The real problem is the
fundamental design of the database - which contains many tables that are
more or less denormalized. The in-house developer apparently believed and
continues to believe that tables *must* (and can only...) directly reflect
the UI they are supporting. There is really no concept of separating the
data structures (DDL) from the presentation (i.e., no DAL in the middle).
Duplicate data and similarly expected problems are prevalent.
The in-house developer believes, and has told his management, that simply
moving the data from Access to SQL Server will improve performance
significantly. They do not have the budget or in-house technical resources
to completely rewrite the system which, IMO, is going to be necessary sooner
or later. For now they are hoping that moving the data to SQL Server and
"throwing hardware at it" will be good enough to result in acceptable
performance - without any attempt to get rid of the MS Access front end or
any significant redesign of the database. And yes, they already have
reasonably good indexes in their tables - meaning that their current
performance is about the best they can possibly have unless they do a major
redesign and rewrite.
I need to be able to talk in specific terms with the management and in-house
technical staff about the pros and cons of their plans. While I can talk
about the db design issues and application architecture, I've never dealt
with an Access client to a SQL Server db because I always thought it was
simply a bad practice from the beginning and never really thought through it
much less actually worked with that scenario...
thus I have a few questions:
1. I am wondering what the biggest technical issues are (i.e. reasons doing
this is a bad idea). Does this arrangement (Access client to SQL Server db)
fail to make use of SQL Server's available locking and other concurrency
mechanisms? Does this scenario basically result in a [file server
architecture] with queries processed on the client and not on the server
(because MS Access is at the front end)? What else?
2. What can we do to move processing to the server and out of the MS Access
client? Stored procedures are not an option, I believe, if/when an MS Access
form is bound to a query or table (current prevalent scenario in their db).
I'm sure reports can be generated from stored procedures just fine and
therefore processing for reports moved to the server; but what about the
data entry forms which are bound to tables and/or queries? Stored procedures
are not an option there, so what about views? Can MS Access forms be bound
to SQL Server views? How about bound directly to SQL Server tables? What can
I tell them specifically is wrong, in technical terms, with binding an MS
Access form directly to a SQL Server table?
3. What other "gotchas" are lurking that I might not be aware of? I would
think there would be many - but I'd appreciate a few of the important ones.
I'd like to dodge this bullet altogether but I'm considering getting
involved because I need the money. Even so... I will refuse get involved in
a situation where my reputation is likely to get hurt if it's a totally
impossible situation from the start (i.e. we could get the back end
converted and still realize little or no performance improvement). Is this
scenario a dead-end to begin with given their desire to *not* address the
fundamental design flaws and rewrite the application and redesign the
database?
Thanks!