Это не оптимизация (хотя вы можете утверждать, что это нормализация, если компании могут изменить имя):
CREATE TABLE company (
id INTEGER PRIMARY KEY, -- Well, this would be a serial, but that works different in different DBMS
name VARCHAR(256) UNIQUE
);
CREATE TABLE price (
company_id INTEGER REFERENCES company(id) NOT NULL,
date TIMESTAMP NOT NULL,
open DECIMAL, -- Just grabbed a type here, probably not right for you.
high DECIMAL,
low DECIMAL,
close DECIMAL,
PRIMARY KEY(company_id, date)
);
См. здесь для получения информации о генерации ключа.
Как вы относитесь к компаниям, меняющим название, кстати? Игнорирование этого было бы простым ответом, но правильно ли это? :)
Итак, в любом случае, если таблица станет слишком большой для хорошей производительности, я просто раздел it.