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:
- A desktop software product
- Other desktop software products, hardware environments, operating systems, etc.
- An association category between #1 and #2
- 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:
- Two types of users (admin and visitor)
- Two types of user functions (adding/editing and viewing)
- Table-style pages/matrixes which provided information on specific products - for example, operating systems compatible with our company’s product X
- 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”)
- 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:
- Better and more flexible permissions
- Dynamically built hierarchical navigation (currently the JavaScript navigation is being generated/edited manually in a flat file)
- Additional ways of viewing and/or browsing through the information in a more relational fashion
- 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.
What do you think? Leave a comment. Alternatively, write a post on your own weblog; this blog accepts trackbacks.
Leave a ReplyYou must be logged in to post a comment.