Web Application - Product Compatibility Matrix

After unsuccessfully being able to find an existing web-based application that would allow me to build a product compatibility matrix, I decided to expand my database building and coding knowledge so I could build the tool that I couldn’t seem to find anywhere else. The main purpose of this post is not to ramble on about my junior programming, but rather to share some aspects of my work with the hopes it will help “the next guy” (or gal) build something similar if not better.

Conceptually the application is extremely simple. It is comprised of four main information types:

  1. A desktop software product
  2. Other desktop software products, hardware environments, operating systems, etc.
  3. An association category between #1 and #2
  4. And a level of support

This type of compatibility matrix satisfied a need at my current employer who develops and markets desktop software and receives countless emails and calls that ask questions such as “does your software run on Windows Vista Home?” or “can I import in my data to your software from ACT or Goldmine?”

The database structure itself was fairly easy to think out conceptually and construct. Through some whiteboarding I ended up with a table for each of the items 1-4 above, a table which served as the master matrix and a couple of supplimentary tables which didn’t end up getting worked into my current version yet. The core tables are:

Table Name Fields Explaination
LNProd LNProdID
LNProdClass
LNProdName
LNProdVersion
LNProdRelease
LNProdNotes
Used to define our company’s product(s).
TPProd TPProdID
TPProdClass
TPProdName
TPProdVersion
TPProdRelease
TPProdNotes
Used to define 3rd party products, hardware environments, etc.
Type TypeID
TypeName
Used to define the type of association or relationship there was between the 3rd party product(s) and our company’s product(s) - for example “Import”, “Operating System” or “Database”.
SupLevel SupLevelID
SupLevelName
Used to define the level of support there was between the 3rd party product(s) and our company’s product(s) - for example “Supported”, “Not Supported” or “Limited”.
CompMap CompMapID
TypeID
LNProdID
TPProdID
SupLevelID
Notes
The main table to tie everything together - for example, an entry might reflect: Type: Operating System, LNProd: Our Product, TPProd: Windows Vista Business, SupLevel: Supported.

I was thinking that since each of our company’s products and the 3rd party products have different versions it might be easiest to create a top level name or class for them - for example instead of having to key in “Windows” or “Quickbooks” for every product instance I could have these top level names entered in once and reference them. This would also make it easier to make a change to a brand name without having to do a major search and replace of dozens of individual products. This started to get a little funky when I started piecing everything together, so for my current version I have the tables defined, but not really using them:

Table Name Fields Explaination
LNProdClass LNProdClassID
LNProdClassName
Used to define our company’s top level product names.
TPProdClass TPProdClassID
TPProdClassName
Used to define 3rd party top level product names.

The functional side of the application led to slightly bigger problems and challenges. I’ll admit these the result of my underdeveloped programming skills to a large degree, but determined to actually complete the project on my own they were problems and challenges nonetheless.

The functionality I wanted was nothing too out of the ordinary for a web-application:

  1. Two types of users (admin and visitor)
  2. Two types of user functions (adding/editing and viewing)
  3. Table-style pages/matrixes which provided information on specific products - for example, operating systems compatible with our company’s product X
  4. The means to browse our company’s products (and versions) and view compatibility with the various 3rd party products - either across all types or by a specific type (such as “Import” or “Database”)
  5. The means to search for information

But did I mention my underdeveloped programming skills? After a few fairly unsuccessful attempts in which I either modified the code of an existing open source engine or built code from scratch I was lucky enough to run into an open source application named DaDaBIK - http://www.dadabik.org. Developed by an Italian analyst and developer, DaDaBIK is a PHP application (or “engine” of sorts) that was designed to help people create a highly customizable front-ends for a database. As I had worked out the database structure itself and the major road block was the application’s user-facing side, DaDaBIK provided a strong foundation for all of the features and functions I was looking for.

The product compatibility application is still fairly young in terms of its development, but is functioning at a base level within our office’s intranet quite well. Users are able to browse or search for information related to our company’s desktop products and compatibility with 3rd party applications, mobile devices, operating systems, hardware environments, etc and while there are some security holes here and there in the permissions component (shhhhhhh!) I’ve blocked off admin tools which allow me to grow and manage the information repository.

On the “to-do” list for the application are:

  1. Better and more flexible permissions
  2. Dynamically built hierarchical navigation (currently the JavaScript navigation is being generated/edited manually in a flat file)
  3. Additional ways of viewing and/or browsing through the information in a more relational fashion
  4. Potentially migrate from an MSSQL database to MySQL database

If anyone has an interest in viewing or contributing to this application please contact me. As my time allows I’ll be continuing to develop the application and posting more information, screen shots and such as I do.

 
You might also enjoy...
Discussion

What do you think? Leave a comment. Alternatively, write a post on your own weblog; this blog accepts trackbacks.

Leave a Reply

You must be logged in to post a comment.