Handling External DB without PK How can I handle a table given to me from an outside DB that does not have a PK? Or even an ID field that marks the record specifically. I am using SQL Server.
I have a table that has come to me that has information on an event. I need to be able to pull the company information that I can. There is an event_id field that I can use to keep track of the rows, but there is no company_id.
Here are the rows I think are useful for this discussion:

event_id
company_name

I can do a grouping by company_name and get multiple counts, so I know the name is consistent. The end goal of this is to connect this to my larger DB that DOES have company_id columns.
The external DB is not willing to change their export at all.
Should I create a separate key table for the companies in this table and simply keep my own set of keys? Is that good practice? If so, how can I do that? If not, what should I consider doing?
Forgive me if this question has been answered before. I looked but could not find it. I'm not even sure how to word this question. I would love to be pointed in the right direction.
If the external company is not willing to correct their export, then you can set up your own lookup table.

CREATE TABLE dbo.Companies
(
  CompanyID int IDENTITY(1,1) PRIMARY KEY,
  CompanyName nvarchar(255)
);


Now, when you get a new import, I assume this goes into some temporary ETL table. So you do:

INSERT dbo.Companies(CompanyName)
  SELECT company_name 
  FROM dbo.ETL_Table AS etl
  WHERE NOT EXISTS
  (
    SELECT 1 
      FROM dbo.Companies 
      WHERE CompanyName = etl.company_name
  )
  GROUP BY company_name;


Now you can join against your lookup table on the name, and that join can produce the IDs you need to use in your own referential integrity.

This does not handle the case when a company name changes, and I don't know how you can detect that.