Summary: I set up my laptop as a development system to work on a JSP application which connects to an Oracle 10g database. I had installed Oracle locally on my laptop a few times and finally got a stable version up and running, although I still run into issues here and there. One of the problems I was experiencing recently was being unable to open the administration page for a local database I created. It was only happening intermittently and seemed to be related to having multiple network interfaces enabled. If I disabled all of the interfaces I wasn’t using, and left only the one I needed, then it would usually work. However, this poses a problem when I must have more than one interface enabled, such as when connected to another network via a VPN. After much research, I found quite a bit of information about this problem. Seems it is rather common.
Resolution: Most times, the fix for the problem is to install and configure the Microsoft Loopback Adapter. Also, the local hosts file may need to be modified. Details on how to do this can be found easily on the web by doing a quick search for “installing microsoft loopback adapter”. Also, if you throw an “oracle” in the search somewhere, you’ll find a lot of info related to this specific issue. Here’s someone else who was experiencing a similar problem. http://oracleplz.blogspot.com/2006/02/10g-installation-on-windows.html
You may need to verify that the admin port is listening as well. You can test this by running telnet from the command line. For instance, telnet computername 5500. If the connection fails, run a netstat -a command and make sure that the computer is listening on the specfied port. If the system is not listening on the port, then the service is probably not started. To manually start the database service, open up the service list in Windows and make sure that the OracleDBConsole service is started. If it’s unable to start, you may need to manually restart the OracleService service.
ADO.NET is a newer version of ADO or ActiveX Data Objects. Microsoft created the ADO object model as a way to connect to databases from within programs (Wikipedia – ActiveX Data Objects, 2006). Although ADO.NET is based on ADO, there are some significant differences. Most of the changes made to ADO.NET are improvements such as better XML integration, disconnected data access, and .NET Framework integration (MSDN – ADO.NET for the ADO Programmer, 2006). ADO.NET is used to connect to a variety of different data sources such as MySQL and MS SQL Server. The data can be viewed and manipulated in different ways. For instance, it is possible to view, update, and delete data using different queries (MSDN – Overview of ADO.NET, 2006). The advantages of using ADO.NET are its improvements over ADO as mentioned above, as well as performance and its ease of implementation (ADO.NET Pros and Cons, 2006).
ADO.NET consists of two main components: the Data provider and the DataSet. The Data provider objects are classes that are used to connect to and communicate with a database. Five common objects are used as part of the Data provider. The Connection object is used to connect to a data source. The Command object is used to run a command against a data source, such as a query. The Parameter object is used to send a parameter with a command, such as a stored procedure. The DataAdapter object is used to send data back and forth between the DataSet and the data source. The DataReader object is used to process a large amount of data but only one record can be read at a time. The DataSet is the other main component of ADO.NET. DataSet objects contain classes, which represent an actual database and the data within it. A DataSet object can contain other objects such as a DataTable, a DataRelation and a Constraint. The DataTable object can contain objects such as a DataColumn and a DataRow. All of these objects are used to represent the data and structure in a database (Wikipedia – ADO.NET, 2006).
Knowing how to take advantage of the features of ADO.NET is essential when developing business applications. Many business applications contain or communicate with a backend database. Some standalone applications might include with it a small Access or dBase database. For instance, a bug tracking program or a low-end customer relations management application would need to store information in a database. That information may need to be viewed and/or updated. The application would be designed to limit the control that users have over the backend database. If necessary, a custom application could be developed using .NET to connect to the backend database, which could offer more or less functionality based on the needs of the users. ADO.NET features could be used in the custom .NET application to provide access to the data within the database. Some larger organizations might have huge database systems that contain much more information than a smaller Access database would be able to support. These organizations require higher end database systems, such as Oracle or MS SQL Server. ADO.NET could be used within a client/server .NET application to connect to these higher end systems as well (W3Schools, 2006).
Resources:
Wikipedia – ActiveX Data Objects. (2006). Retrieved June 3, 2006 from http://en.wikipedia.org/wiki/ActiveX_Data_Objects
MSDN – ADO.NET for the ADO Programmer. (2006). Retrieved June 3, 2006 from http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/adonetprogmsdn.asp
MSDN – Overview of ADO.NET. (2006). Retrieved June 3, 2006 from http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconOverviewOfADONET.asp
ADO.NET Pros and Cons. (2006). Retrieved June 4, 2006 from http://www.vbip.com/books/1861005563/chapter_5563_06.asp
Wikipedia – ADO.NET. (2006). Retrieved June 4, 2006 from
http://en.wikipedia.org/wiki/ADO.NET
W3Schools – ASP.NET – Database Connection. (2006). Retrieved June 4, 2006 from http://www.w3schools.com/aspnet/aspnet_dbconnection.asp
The following roles may be assigned to different people on a development team: requirements analyst, designer/architect, developers/coders, tester/QA, DBA, IT dept., project manager. Some of these may overlap a bit where individuals are responsible for multiple roles in the development process. In larger environments, there may be entire teams delegated to be responsible for different roles (Developer.com, 2006).
With regard to the duties for each role, the requirements analyst is responsible for analyzing business requirements and needs, which aid in providing solutions to problems (The Data Warehousing Institute, 2006). The designer or architect uses the information gathered by the requirements analyst to design the database structure. The developers are responsible for implementing the actual design by coding the application and creating the database. The testers test the application and database functionality once the application is in its final stages of development. Essentially, a DBA, or database administrator would be responsible for managing and administering the database however, in smaller environments, or when using smaller database applications, the IT department is typically responsible for hardware and system support once the database application has been deployed (FMS Technical Papers, 2006). The project manager is responsible for overseeing and management all aspects and phases throughout the design and development process (The New York Times, 2006).
Rapid application development and deployment is an advantage to using Access in a team environment. Database applications can be implemented quickly, which saves time, money and other resources. The low cost element is a major benefit of using Access. It is considerably cheaper than other solutions (GI Business Data Solutions, 2006). It is also bundled with the Microsoft Office suite of applications. Many companies already have user licenses for Office products. Therefore, there is no added cost in this case. Another advantage to using Access is its Office integration capabilities (Access Programmers, 2006).
Access can be used to connect to a variety of backend databases, including MS SQL Server databases by using linked tables. It is also possible to use an Access application interface to connect to multiple databases. In a team environment, users as well as developers only need to be trained on Microsoft Access. Access is easier to learn than other more advanced database systems, such as Oracle or MS SQL Server (Microsoft, 2006). Another advantage to using Access to develop a database is its ease of implementation and overall simplicity (Adobe, 2006).
Although the maximum number of concurrent users is 255, the recommended number of simultaneous is only 25-50 (MS Access 2000 Maximum Capacities, 2006). This can be considered a disadvantage if many developers must be connected to the same database at the same time. In addition, as databases grow, they can be increasingly difficult to support. The IT department frequently becomes responsible for supporting smaller database systems developed in Access, which they are usually not too fond of doing because of Access’ challenges and limitations (FMS Technical Papers, 2006). Another disadvantage to developing an Access database in a team environment is that all developers must have Access installed (Microsoft, 2006).
Assuming the challenges of developing an Access database on a team are obstacles, which can be worked around in some way; manageability and data integrity could become an issue when using a team to develop an Access database. Having multiple users modifying a database at the same time always runs the risk of compromising data integrity. One way of dealing with this issue would be to work on separate files for the interface development and making frequent backups of the actual data. Although, this may be considered a limitation being that a database cannot be backed up while users are connected to it. Infrequent backups and difficulty restoring data can become an issue if a team of developers is working on the same database.
Assuming limitations of using Access in a team development environment are considered obstacles, which cannot be worked around; one major limitation would be the restriction of database size. Having multiple developers working on one database might require a significant amount of space for data, even if it is only temporary. Access only supports databases up to 2 gigabytes in size. If more space is needed, the database should be upgraded to a more robust system such as MS SQL Server. Some argue that Access is unstable in multi-user environments (Adobe, 2006).
References:
Developer.com. (2006). Retrieved May 24, 2006 from http://www.developer.com/java/ent/article.php/3529081
The Data Warehousing Institute. (2006). Retrieved May 24, 2006 from http://download.101com.com/pub/TDWI/Images/Building%20a%20BI%20Career.pdf
FMS Technical Papers. (2006). Retrieved May 21, 2006 from http://www.fmsinc.com/tpapers/genaccess/DBOD.asp#challenges
The New York Times. (2006). Retrieved May 24, 2006 from http://jobs.nytimes.com/texis/jobsearch/details.html?id=446c92d36d6ea0&pp=25&pbt=nytcategoryinformation&cbt=Statistics&view=2&page=1
GI Business Data Solutions. (2006). Retrieved May 24, 2006 http://www.galleryimage.com.au/Why-Access-Database.htm
Access Programmers. (2006). Retrieved May 24, 2006 from http://www.access-programmers.co.uk/services2/why_access.htm
Microsoft. (2006). Retrieved May 24, 2006 from http://download.microsoft.com/download/5/d/0/5d026b60-e4be-42fc-a250-2d75c49172bc/Access_Whats_Right.doc
Adobe. (2006). Retrieved May 24, 2006 from http://www.macromedia.com/cfusion/knowledgebase/index.cfm?id=tn_17034
MS Access 2000 Maximum Capacities. (2006). Retrieved May 24, 2006 from http://www.micronetservices.com/Access2kCapacities.htm
Microsoft SQL Server is a high performance, scalable and secure database management system available for Microsoft Windows systems. The most recent release of MS SQL Server is available in four different versions. The Express Edition, which is essentially a newer release of the Microsoft SQL Server Database Engine (MSDE), is free to use and redistribute as an extremely lightweight version of Microsoft SQL Server. The Express Edition is easy to install and offers enhanced security. As far as scalability and performance is concerned, the Express Edition only supports one CPU and one gigabyte of RAM. In addition, databases are limited to four gigabytes in size (Microsoft – SQL Server Express Edition Features, 2006).
If high performance and scalability are desired, it may be best to go with the Workgroup Edition, the Standard Edition, or the Enterprise Edition, depending on actual requirements. Each of these versions has no limit with regard to database size. The Workgroup Edition supports up to two CPUs. The Standard Edition supports up to four CPUs. The Enterprise Edition has no limit to the number of CPUs that it supports. The Workgroup Edition supports up to three gigabytes of RAM. Both the Standard and Enterprise Editions support as much RAM as the operating system can handle. The Enterprise Edition also supports features such as partitioning and indexed views, which are not available in other versions. All versions, including the Express Edition offer the same security options (Microsoft – SQL Server 2005 Features Comparison, 2006).
The pricing for MS SQL Server is broken down by license type and version. Each version is priced differently according to overall features and there are two types of licensing available for each version. The two types of licensing are Processor Licensing and Client Access Licensing. Processor licensing is broken down by how many processors the server will contain. Client access licensing is broken down by the number of clients who will access the server. The only exception is with the Express Server version, which is free. Client Access Licensing can be further broken down by either users or devices. Either way, the pricing is the same (Microsoft – SQL Server: How to Buy, 2006).
Here is a sample breakdown of the prices for different versions:
|
Version |
Processor Licensing (Retail) |
Client Access Licensing (Retail) |
|
Workgroup |
$3,899 |
$739 with 5 Workgroup CALs |
|
Standard |
$5,999 |
$1,849 with 5 CALs |
|
Enterprise |
$24,999 |
$13,969 with 25 CALs |
Resources:
Microsoft – SQL Server Express Edition Features. (2006). Retrieved May 14, 2006 from http://www.microsoft.com/sql/editions/express/features.mspx
Microsoft – SQL Server 2005 Features Comparison. (2006). Retrieved May 14, 2006 from http://www.microsoft.com/sql/prodinfo/features/compare-features.mspx
Microsoft – SQL Server: How to Buy. (2006). Retrieved May 14, 2006 from http://www.microsoft.com/sql/howtobuy/default.mspx
One of the appeals to using Microsoft Access is its versatility with regard to its integration capabilities. It is possible to import and export a variety of different data types and files. For instance, the data within an Access database can be easily exported to XML data. XML has many benefits but is particularly useful when creating web services (GotDotNet, 2006).
Microsoft Access also integrates very well with the Office suite of applications. For example, Access data can be directly exported to Excel spreadsheets (Adamski & Finnegan, 2006, pp. AC414 – AC422). From within Microsoft Word, the data in an Access database can be used to create mail merge documents. The mail merge function is used to create customized documents using a template in Word (Microsoft – Help and Support, 2006).
As with all Microsoft Office applications, Access can be customized using the Visual Basic for Applications (VBA) language. It is possible to create modules that contain procedures and functions, which can be called from within an Access database. These modules can also be used in other applications. This functionality provides further integration with other Office applications (Adamski & Finnegan, 2006, pp. AC554 – AC590).
One of the most powerful integration features of Microsoft Access is the ability to connect to databases from outside sources. For instance, it is possible to create a custom application that connects to an Access database to retrieve and manipulate data. These custom applications can be written in just about any programming language including Visual Basic, Java, and C (Visual Basic Explorer, 2006).
Although Access databases are not optimized for multi-user access, they can be very useful when creating portable stand-alone applications that require a powerful backend database. Access databases can also be easily upgraded to higher end database systems, such as SQL Server (Enflow Information Systems, 2006).
Another powerful integration feature is the ability to generate SQL code using the expression builder (FMS Technical Papers, 2006). There are times when I have had to write complex SQL statements for applications, but rather than write them from scratch, I was able to use the query wizard to help build the SQL statement for me. I was then able to use the SQL statement that was generated by Access in my Visual Basic code. I have found it useful at times as well to create temporary databases, which allow me to test out my SQL code before actually running it against a production database.
Finally, Microsoft Access also offers built-in web integration features such as the ability to create web forms that allow data viewing and manipulation (Adamski & Finnegan, 2006, pp. AC369 – AC414).
Reference:
Adamski, J. J. & Finnegan, K. T. (2006). New Perspective on Microsoft Office Access 2003, Second Ed. Boston: Course Technology
GotDotNet. (2006). Retrieved May 14, 2006 from http://www.gotdotnet.com/team/XMLWebServices/
Microsoft – Help and Support. (2006). Retrieved May 14, 2006 from http://support.microsoft.com/kb/q208933/
Visual Basic Explorer. (2006). Retrieved May 14, 2006 from http://www.vbexplorer.com/VBExplorer/vb_feature/june2000/Database_Beginner_ADO_DAO.asp
Enflow Information Systems. (2006). Retrieved May 14, 2006 from http://www.enflow.com/WhyUseAccess.htm
FMS Technical Papers. (2006). Retrieved May 14, 2006 from http://www.fmsinc.com/tpapers/queries/
Filed under: Databases
From a broad perspective, business rules are a set of defined guidelines that help a business achieve its goals. These rules may include operational guidelines, policies, regulations, and common practices. Businesses often hire consultants to help them gather information to define their own set of business rules. There are software packages available as well to aid in the process of defining business rules (Wikipedia – Business Rules, 2006).
With regard to database design, business rules are specifications used in the design process. They are determined during the interviewing phase. During the interviewing phase, the users and managers should be asked questions that will help the database designer determine requirements and limitations of the database. These requirements pertain to the actual data that will be stored, the data structures, as well as the relationships between entities and entity sets. Business rules should be documented and used as guidelines throughout the database design process. Without business rules, a database designer would have little to go on when designing the database. Business rules should be kept up to date according to current requirements to ensure data integrity consistency (DBMS Magazine, 2006).
To enforce business rules during the database design process, different types of data integrity should be used. For example, entity integrity should be used to enforce rules that pertain to the types of data that can be stored and referential integrity should be used to define how data is related (Jose’s Database Programming Corner, 2006).
To aid in communicating business rules during the database design process, graphical depictions of data, data structures and relationships are often used. These are called Entity Relationship Diagrams, or ERDs (About – Entity-Relationship Diagram, 2006). There are tools available to help create these diagrams. For example, CASE tools can be used to analyze requirements, model processes and develop data models, such as ERDs (Wikipedia – Case Tool, 2006).
Reference:
DBMS Magazine. (2006). Retrieved May 13, 2006 from http://www.dbmsmag.com/hernandz.html
Jose’s Database Programming Corner. (2006). Retrieved May 13, 2006 from http://b62.tripod.com/doc/dbbase.htm
Wikipedia – Business Rules. (2006). Retrieved May 13, 2006 from http://en.wikipedia.org/wiki/Business_rules
Wikipedia – CASE Tool. (2006). Retrieved May 13, 2006 from http://en.wikipedia.org/wiki/CASE_tool
About – Entity-Relationship Diagram. (2006). Retrieved May 6, 2006 from http://databases.about.com/cs/specificproducts/g/er.htm
Filed under: Databases
There are certain guidelines that should be taken into consideration when designing the logical structure of a relational database regardless of its physical implementation. One of the most important benefits of using a relational model versus a flat-file model when designing a database is the reduction of data redundancy. When a database consists of several unrelated flat data files, many times the tables will contain redundant attributes, which hold duplicate data. One of the main purposes of relational databases is to reduce or eliminate data redundancy by using relationships between tables, references to data that reside in separate entity sets and normalization (Washington.edu, 2006).
Before actually creating a database, careful thought should be put into the design process. The table structures, including attributes, entities and data types should be known at least to the extent possible. The relationships between tables and their types should also be determined and mapped out. This requires identifying primary and foreign keys within tables and understanding how the data will be referenced by other tables (Adamski & Finnegan, 2006, pp. AC A1 – AC A6). When creating table structures, ideally the table will contain a primary key, no calculated fields, and no redundant data (Databasedev.co.uk, 2006). To aid in the design process, entity-relationship models can be used. These help to identify relationships between tables and their entities. A visual diagram can be used as a graphical representation of an entity relationship model. The diagram describes conceptual relationships between tables (Rob & Coronel, 2004, p. 45).
One of the most important aspects of database design is the concept and use of normalization. Normalizing a database is accomplished by analyzing table structures and making modifications as necessary. When appropriately implemented, normalization helps to reduce data redundancy and anomalies, but there are times when it may be necessary to de-normalize a database such as when increased performance is desired (Adamski & Finnegan, 2006, p. AC A115).
Another major consideration when designing a database is data access time. Although hardware and software have a significant impact on the speed at which data can be accessed and manipulated, just as important is how the data is organized within a database. In a sense, the better organized a database is, the faster data can be accessed. However, it is important to keep in mind that if a database is over-normalized, it may actually result in decreased performance (Rob & Coronel, 2004, p. 184).
Regardless of which software or database management system is used, the concepts and guidelines pertaining to the design of a relational database are essentially the same.
Reference:
Rob, P. & Coronel, C. (2004). Database Systems: Design, Implementation, & Management. Boston: Course Technology
Adamski, J. J. & Finnegan, K. T. (2006). New Perspective on Microsoft Office Access 2003, Second Ed. Boston: Course Technology
Databasedev.co.uk – Relational Database Design Guidelines. (2006). Retrieved May 6, 2006 from http://www.databasedev.co.uk/database_design_guidelines.html
Washington.edu – Benefits of Normalization. (2006). Retrieved May 6, 2006 from http://faculty.washington.edu/ocarroll/infrmatc/database/design/sld029.htm
Filed under: Databases
Constraints are used within a database to ensure data integrity. The three main types of integrity constraints are primary key, foreign key, and domain integrity. A primary key is an attribute or field within a table and contains unique data, which is used in relationships to identify the data within rows in a table (Rob & Coronel, 2004, p. 79). Entity integrity constraints require that the value of a primary key in an entity must not be null (Adamski & Finnegan, 2006, AC A11). Although they cannot always be avoided, null values typically indicate poor database design (Rob & Coronel, 2004, p. 83). In an effort to maintain integrity during the design process, many database design applications deny the creation of a primary key if it contains a null value. Entity integrity also requires that the primary key in an entity contain a unique identifier. This ensures the unique identity of each entity itself so that the data can be referenced by foreign keys in other entities (Rob & Coronel, 2004, p. 85).
An example of entity integrity would be a database that contains a table called EMPLOYEES. The table would contain an entity named EMPLOYEE_ID. Each employee would have a unique employee ID to identify them. This ID could be any number, even a social security number for example, as long as it is unique to the table. This field would be required any time a new record is added to the table.
Referential integrity refers to the consistency of the data that is shared between foreign and primary keys in related tables (Rob & Coronel, 2004, p. 84). Referential integrity requires that a foreign key, which does not contain a null value, correspond to data in a primary key within another entity (Adamski & Finnegan, 2006, AC A11). Another benefit of referential integrity is that it does not allow the deletion of primary keys, which are referenced by foreign keys in related entities. Some database management systems allow the deletion of primary keys but offer options on how to handle the relation between keys. For instance, you can specify cascading deletion, which finds all related foreign keys and deletes them when a primary key is deleted so that the data object is not orphaned (DBMS Online, 1996).
An example of referential integrity would be a table called DEPARTMENTS that lists all departments that an employee could belong to where each department is uniquely identified by a primary key value such as DEPARTMENT_ID. Then this entity would be referenced in the EMPLOYEES table under a foreign key entity called DEPARTMENT_ID (Rob & Coronel, 2004, p.110).
Reference:
Rob, P. & Coronel, C. (2004). Database Systems: Design, Implementation, & Management. Boston: Course Technology
Adamski, J. J. & Finnegan, K. T. (2006). New Perspective on Microsoft Office Access 2003, Second Ed. Boston: Course Technology
DBMS Online. (1996). Retrieved April 29, 2006 from http://www.dbmsmag.com/9606d17.html
Filed under: Databases
Relationships between tables in a relational database are much like relationships between people. There are varieties of different types of relationships that exist between people. When working with a relational database, three of the main relationship types are one-to-one, one-to-many, and many-to-many (ONLamp, 2006)
One way to look at relationships would be to look at a family. A one-to-one relationship is much like the relationship that exists between a mother and a father or husband and wife. Each child in the family has only one biological mother and one biological father and in a family, there is typically only one father and one mother. Therefore, the relationship that exists between the mother and father is a one-to-one relationship (Rob & Coronel, 2004, p. 95). However, for the sake of argument, if the father had multiple wives then it could be considered a one-to-many relationship.
Another one-to-many relationship would be the one that exists if a person has more than one child. Using the family as an example again, if a mother and father have multiple children then the relationship that exists between each parent and their children would be a one-to-many relationship. It would be one mother for many children and one father for many children. However, if you were to consider the mother and father to be a single entity set known as “parents” and they had multiple children, then this would be a many-to-many relationship. Of course, each child would never have more than two biological parents. Although, they could have multiple stepparents, or again, the father could have multiple wives. Either way, this would be an example of a many-to-many relationship.
The following is a description of how the relationships between family members could be described in a database. In the one-to-one relationship described above, you would have a table called FATHERS, a table called MOTHERS, and another table called CHILDREN. The FATHERS table would contain a primary key, which uniquely identifies each father. The table might also contain other entities, such as name, age, address, etc… The FATHERS table would contain foreign keys, which refer to unique ID’s that would actually be the primary key in the CHILDREN table. Each record in the CHILDRENS table would contain a unique ID as the primary key as well as other entities, such as name, age, address, etc… Attributes of these entities might include “unique”, “not null”, “data type”, etc… The structure of the MOTHERS table would be nearly identical to the FATHERS table. The relationship between the MOTHERS and FATHERS table would exist by using foreign keys that refer to the primary key of the opposite table.
Using the same table design, the relationship between the mother in the MOTHERS table and her children in the CHILDREN table, assuming she has more than one child, would indicate a one-to-many relationship.We could create another entity set called PARENTS, which would contain a primary key such as PARENTS_ID, as well as two foreign keys that refer to the MOTHER_ID in the MOTHERS table and FATHER_ID in the FATHERS table, both of which are primary keys. The CHILDREN table would contain a foreign key, which refer to the primary key of the PARENTS table, or PARENT_ID. There could be multiple children for each set of parents, but considering that the parents refer to foreign keys in the MOTHERS and FATHERS table this would be considered a many-to-many relationship (Rob & Coronel, 2004, p. 99).
Here is another way the family database might be organized using the common shorthand method (Adamski & Finnegan, 2006, AC A9-10):
Parents (Parent_ID, Mother_ID, Father_ID)
Foreign key: Mother_ID to Mothers table
Foreign key: Father_ID to Fathers table
Mothers (Mother_ID, Name, Age, Address)
Foreign key: Mother_ID to Parents table
Fathers (Father_ID, Name, Age, Address)
Foreign key: Father_ID to Parents table
Children (Child_ID, Name, Age, Address, Parent_ID)
Foreign key: Parent_ID to Parents table
Below is a diagram of how the data in the family database would be related.

Reference:
ONLamp. (2006). Retrieved April 29, 2006 from http://www.onlamp.com/pub/a/onlamp/2001/03/20/aboutSQL.html
Rob, P. & Coronel, C. (2004). Database Systems: Design, Implementation, & Management. Boston: Course Technology
Adamski, J. J. & Finnegan, K. T. (2006). New Perspective on Microsoft Office Access 2003, Second Ed. Boston: Course Technology