Hey Everybody!
It's been a long time since I wrote an introductory message and due to my work duties becoming focussed on some other areas I forgot all about this forum and the resources it could provide me. So sorry for my absence and forgive my impertinence in coming to you with all of this!
As I am now coming to construct what is essentially my first "proper" Access database I really wanted some guidance to make sure I am on the right lines before I get too far in the development process. Apologies in advance for what will inevitably be a long-winded post; I'd rather give as much information now than having to fill in bits as I go along.
Background
The company I work for is a non-profit association of insolvency \ bankruptcy \ turnaround management companies. One of their primary duties is to facilitate the running of various conferences and seminars throughout the world during the course of each year. There is generally one major annual conference and 4-5 smaller seminars.
Prior to being hired by the associations, all IT work was either outsourced or cobbled together by members of staff with no massive degree of technical expertise - as mentioned, we're non-profit so everything has to be developed as a cost-effective and needs-must basis.
As a result, the database that I have been asked to re-write is archaic at best, and designed without much thought for standard database design principles. (And to make matters worse when it comes to making use of any of the pre-existing data, the database was written in Access 97!)
Aim
So, having said all that. I am trying to design a database that will allow us to store information about the conferences \ seminars (hereafter referred to as event for ease), the registered delegates, the sessions at the event that they have requested to attend, any social functions they wish to attend and also to record financial information for invoice and auditing purposes.
My intention is to have a DB that will be usable from event to event, eliminating the need for multiple databases. I would certainly want to split the database to allow this so that front-end objects are separate from back-end objects but a comprehensive design of this nature might be beyond my capabilities at this point.
I have developed a number of tables and fields - attempting to normalise as best as possible - and have reached the point where I am looking to define relationships for the tables but as stated above, want to make sure I'm doing the right thing so far before I get ahead of myself. I'm confident that once the underlying data structure is established that creating the necessary forms and reports won't be too much trouble.
So far...
I have established the following tables and fields:
tblBookingInfo
BookingID - PK
DelegateID - FK
EventID - FK
BookingDate
BookedBy
BookingStatus
PaymentMethod
BadgeName
AccompanyingPerson
HotelInformation
DietaryRequirements
Remarks
Comment 1: Not sure if I am right in including 3 ID fields (AutoNumbered in the relevant tables below).
Comment 2: BookedBy has been implemented thus far as a lookup field populated by information in "tblEmployeeInfo" below. As per your commandments I fear this is already incorrect?
Comment 3: Added PaymentMethod and linked it to tblPaymentMethod in the same way as above.
tblBreakoutFuncInfo - Omitted at this time as I am not entirely sure of the best implementation or if this is necessary but this table would list the different breakout sessions (A1, A2, A3 ... B1, B2, B3 and so on for example) and Social Functions for each event so that this information can be attributed to a booking. Possibly would require two separate tables to differentiate Breakout designations from Social Functions?
tblCompanyInfo
CompanyID - PK
CompanyName
CompanyAddress1
CompanyAddress2
CompanyTownCity
CompanyStateProvince
CompanyZipPostalcode
CompanyCountry
CompanyPhone
CompanyFax
CompanyEmail
IsG36?
Comment 1: IsG36 is a Yes\No value which would be used to signify whether a company is a member of the Group of Thirty-Six.
Comment 2: Am I right in using Address1 \ Address2 fields or should this be avoided? I query this as being an international association there is no one fixed address style that we would be able to use.
tblDelegateInfo
DelegateID - PK
CompanyID - FK
DelegateTitle
DelegateFirstName
DelegateInitials
DelegateLastName
DelegateSuffix
DelegatePhone
DelegateFax
DelegateEmail
IsMember?
Comment 1: Again, "IsMember?" is a Yes\No field to signify whether the registered delegate is in-fact a member of our association because we also have delegates who are not necessarily members. This is an entirely separate matter to "IsG36?".
Comment 2: Again, concerns about the address format are as above
tblEmployeeInfo
EmployeeID - PK
EmployeeFName
EmployeeLName
EmployeeInitials
Comment 1: I initially thought to use tblEmployeeInfo as means to populate "BookedBy" in tblBookingInfo Possibly wrong, as I notice your commandments recommend the avoidance of lookup tables?
tblEventInfo
EventID
EventName
EventStartDate
EventEndDate
EventIsSeminar?
EventVenue
EventAddress1
EventAddress2
EventTownCity
EventStateProvince
EventZIPPostcode
EventCountry
EarlyMemberFee
EarlyNonMemberFee
LateMemberFee
LateNonMemberFee
tblPaymentMethod
PaymentID
PaymentMethod
Relationships
Now, as far as relationships go the following facts can be said to be true:
- An Event can have one or more Delegates
- An Event can have one or more Bookings
- A Delegate can attend one or more Events
- A Delegate can only have one Booking per Event
- A Delegate can belong to only one Company
- A Booking can be made by only one Employee
So, what I'd really like to know is, am I doing anything fundamentally wrong at this point or anything that is likely to cause me problems further down the line?
I've read that Many-to-Many relationships are not very common but based upon the above it looks like I'd end up with a few Many-to-Many relationships. tblBookingInfo looks to provide the link to-and-from a number of other tables, is this OK or is there a better way of doing this?
To anyone who has read thus far, my thanks and appreciation in advance for any assistance you might be able to provide. Also, given the magnitude of the project there will probably be things that I've missed out or haven't clarified so please let me know and I'll fill in any blanks!
It's been a long time since I wrote an introductory message and due to my work duties becoming focussed on some other areas I forgot all about this forum and the resources it could provide me. So sorry for my absence and forgive my impertinence in coming to you with all of this!
As I am now coming to construct what is essentially my first "proper" Access database I really wanted some guidance to make sure I am on the right lines before I get too far in the development process. Apologies in advance for what will inevitably be a long-winded post; I'd rather give as much information now than having to fill in bits as I go along.
Background
The company I work for is a non-profit association of insolvency \ bankruptcy \ turnaround management companies. One of their primary duties is to facilitate the running of various conferences and seminars throughout the world during the course of each year. There is generally one major annual conference and 4-5 smaller seminars.
Prior to being hired by the associations, all IT work was either outsourced or cobbled together by members of staff with no massive degree of technical expertise - as mentioned, we're non-profit so everything has to be developed as a cost-effective and needs-must basis.
As a result, the database that I have been asked to re-write is archaic at best, and designed without much thought for standard database design principles. (And to make matters worse when it comes to making use of any of the pre-existing data, the database was written in Access 97!)
Aim
So, having said all that. I am trying to design a database that will allow us to store information about the conferences \ seminars (hereafter referred to as event for ease), the registered delegates, the sessions at the event that they have requested to attend, any social functions they wish to attend and also to record financial information for invoice and auditing purposes.
My intention is to have a DB that will be usable from event to event, eliminating the need for multiple databases. I would certainly want to split the database to allow this so that front-end objects are separate from back-end objects but a comprehensive design of this nature might be beyond my capabilities at this point.
I have developed a number of tables and fields - attempting to normalise as best as possible - and have reached the point where I am looking to define relationships for the tables but as stated above, want to make sure I'm doing the right thing so far before I get ahead of myself. I'm confident that once the underlying data structure is established that creating the necessary forms and reports won't be too much trouble.
So far...
I have established the following tables and fields:
tblBookingInfo
BookingID - PK
DelegateID - FK
EventID - FK
BookingDate
BookedBy
BookingStatus
PaymentMethod
BadgeName
AccompanyingPerson
HotelInformation
DietaryRequirements
Remarks
Comment 1: Not sure if I am right in including 3 ID fields (AutoNumbered in the relevant tables below).
Comment 2: BookedBy has been implemented thus far as a lookup field populated by information in "tblEmployeeInfo" below. As per your commandments I fear this is already incorrect?
Comment 3: Added PaymentMethod and linked it to tblPaymentMethod in the same way as above.
tblBreakoutFuncInfo - Omitted at this time as I am not entirely sure of the best implementation or if this is necessary but this table would list the different breakout sessions (A1, A2, A3 ... B1, B2, B3 and so on for example) and Social Functions for each event so that this information can be attributed to a booking. Possibly would require two separate tables to differentiate Breakout designations from Social Functions?
tblCompanyInfo
CompanyID - PK
CompanyName
CompanyAddress1
CompanyAddress2
CompanyTownCity
CompanyStateProvince
CompanyZipPostalcode
CompanyCountry
CompanyPhone
CompanyFax
CompanyEmail
IsG36?
Comment 1: IsG36 is a Yes\No value which would be used to signify whether a company is a member of the Group of Thirty-Six.
Comment 2: Am I right in using Address1 \ Address2 fields or should this be avoided? I query this as being an international association there is no one fixed address style that we would be able to use.
tblDelegateInfo
DelegateID - PK
CompanyID - FK
DelegateTitle
DelegateFirstName
DelegateInitials
DelegateLastName
DelegateSuffix
DelegatePhone
DelegateFax
DelegateEmail
IsMember?
Comment 1: Again, "IsMember?" is a Yes\No field to signify whether the registered delegate is in-fact a member of our association because we also have delegates who are not necessarily members. This is an entirely separate matter to "IsG36?".
Comment 2: Again, concerns about the address format are as above
tblEmployeeInfo
EmployeeID - PK
EmployeeFName
EmployeeLName
EmployeeInitials
Comment 1: I initially thought to use tblEmployeeInfo as means to populate "BookedBy" in tblBookingInfo Possibly wrong, as I notice your commandments recommend the avoidance of lookup tables?
tblEventInfo
EventID
EventName
EventStartDate
EventEndDate
EventIsSeminar?
EventVenue
EventAddress1
EventAddress2
EventTownCity
EventStateProvince
EventZIPPostcode
EventCountry
EarlyMemberFee
EarlyNonMemberFee
LateMemberFee
LateNonMemberFee
tblPaymentMethod
PaymentID
PaymentMethod
Relationships
Now, as far as relationships go the following facts can be said to be true:
- An Event can have one or more Delegates
- An Event can have one or more Bookings
- A Delegate can attend one or more Events
- A Delegate can only have one Booking per Event
- A Delegate can belong to only one Company
- A Booking can be made by only one Employee
So, what I'd really like to know is, am I doing anything fundamentally wrong at this point or anything that is likely to cause me problems further down the line?
I've read that Many-to-Many relationships are not very common but based upon the above it looks like I'd end up with a few Many-to-Many relationships. tblBookingInfo looks to provide the link to-and-from a number of other tables, is this OK or is there a better way of doing this?
To anyone who has read thus far, my thanks and appreciation in advance for any assistance you might be able to provide. Also, given the magnitude of the project there will probably be things that I've missed out or haven't clarified so please let me know and I'll fill in any blanks!