I am in the process of setting up a database for item/document control, as well as other applications related to medical device/Pharma usage. Currently, it consists of 4 related tables (see attachment).
The first table (setMBIDNum) is a smart number generator that creates a 9 character string, with the first 5 characters being the smart part and the last 4 characters being an ascension number. These numbers must be unique and are applied to any item or document that is created. The second table, tblMBItemMaster, is a table that contains each item (part, product, utility, instrument, process, equipment, supply, ect.), basically anything physical. The next table, tblMBDocMaster contains any/all documents (policies, SOPs, Work instructions, shop floor papers, product briefs and so forth). The last table, tblMBItemRequest is a link table between tblMBMBItemMaster and tblMBDocMaster and is nothing more than a change request table. All items/documents created or modified are carried out through a change request created in tblMBItemRequest. Although tblMBItemMaster and tblMBDocMaster are identical in structure and certainly they could be combined I want to have specific things isolated into their own table.
Most, but by no means all, of the documents have a direct association with an item. Of course there are other tables that will be part of this e.g. a validation table, a development table, a QA table, et. al. Like the tables shown in the attachment, these will be related in exactly the same manner as tblMBDocMaster and will receive a smart number and be managed through the link tblMBItemRequest.
My question is this. Is this a good approach or should I be considering a different approach to handling the data and the relationships for this database? Also, is the fact that there might be documents that are not associated with an item a possible problem for me (an example would be a policy)?
I will be happy to provide additional information if what I have included here is not clear.
![]()