At start some termins.
A database (DB) is your application in corpore - all tables, forms, queries and reports;
A table is an entity in database where you store some data, which are related somehow. In your database are tables for company info, product info (Offerings), and for linking products and companies (CompanyOfferings);
A table is composed of fields and rows. Any field contains specific type of data - avoid fields having multiple layers of information (i.e. instead of full name of person it is better to have separate fields for fore- and last name). Every row contains a set of data having something common;
Every table must have unique primary key (the table is indexed on this primary key, indexing is needed for Access to optimize queries). Usually is best to have an autonumeric field as primary key, as then you don't have bother with creating proper and unique value for new entry, but you can have primary key entered manually or generated using form events too. And you can have compsite primary keys - but this may cause problems without proper coding sometimes. You can have additional indexes too, when it is reasonable, but don't create them without need too;
When 2 tables have information, which is linked somehow, then you enter the linked field(s) (usually primary key, but it is not a rule) values from one table into fields in another table. Those fields have common name Foreign Keys. It is a good practice to have to index the table on those foreign keys;
Don't use special characters in table or in field names (except underscore). A space is not banned entirely, but better avoid spaces too - it makes writing VBA code later easier. (I.e. instead field [Company Website] have field CompanyWebsite or Company_Website in your table;
Then there are queries, which will read info from your tables and present this info in some modified form. Queries may be saved ones, or you define them in code, or you enter them as sources for forms and reports;
You will use tables, and you will use queries in your application. To avoid confusion what you are using, apply some naming conventions, like all tables are named like tTableName or tblTableName, and all queries are named like qQueryName or qryQueryName.
What type of field is Company Website? Text? Web Address? Link to Web Address? Anyway it probably contains some long text, which makes indexing on this field slow. So I think it is better to design your tables like:
tblOfferings: OfferingID, OfferingCode, OfferingName;
tblCompanies: CompanyID, CompanySite;
tblCompanyOfferings: COID, CompanyID, OfferingID.
Your create a saved query like
Code:
qOfferingList = SELECT c.CompanyID c.CompanySite, o.OfferingCode, o.OfferingName FROM (tblCompanyOfferings co INNER JOIN tblOfferings o ON o.OfferingID = co.OdderingID) INNER JOIN tblCompanies c ON c.CompanyID = co.CompanyID ORDER BY c.CompanySite, o.OfferingName
and then you can run a query like
Code:
SELECT * FROM qOfferingList WHERE CompanyID = 1
to get a list of products for company with CompanyID = 1.
And you run a query (I assume here that OfferingCode is text field) like
Code:
SELECT * FROM qOfferingList WHERE OfferingCode = "SomeTextCode"
to get a list of companies associated with this product.
In both last queries you can define the list of fields you want to get instead of all fields, of-course.