Здравствуйте, wildwind, Вы писали:
RO>>Есть БД, в которой хрянятся записи о товарах и тех, кто им торгует.
W>Не понял структуры данных, поэтому посоветовать нечего. Где что хранится и кто куда FK? :)
W>На всякий случай: http://www.rsdn.ru/article/db/dbhistory.xmlАвтор(ы): Смирнов Андрей
Дата: 23.10.2004
Рассматриваются подходы к отслеживанию действий пользователей в БД, протоколирование изменений и получение данных по состоянию на какой-либо момент.
W>P.S. Еще на всякий случай: http://www.rsdn.ru/article/db/sqlnames.xmlАвтор(ы): Джо Селко
Дата: 09.04.2006
Глава из книги “Стиль программирования Джо Селко на SQL”
Неудачные имена для элементов данных приводят к тому, что код бывает трудно, а то и невозможно прочитать.
Невозможность чтения — не шутка. В старину компании, разрабатывавшие программное обеспечение, нарочно искажали имена и удаляли из исходного кода форматирование, чтобы скрыть от покупателей алгоритм. Эта традиция все еще жива, хотя, может быть, изначальное намерение и утрачено. В августе 2004 г. в одной из групп новостей по SQL была опубликована программа, в которой все имена состояли из одной буквы и длинной цепочки цифр.
В настоящее время существуют стандарты метаданных ISO-11179, описывающие правила именования элементов данных и регистрации стандартов. Поскольку это стандарт ISO, его надлежит применять не только в SQL, но и вообще везде.
Стандартизация, немного печатного мастерства и некоторый здравый смысл — вот слагаемые успешной работы.
Просто не хотел загромождать. Если так проще, то:
-- это всё время постоянно
CREATE TABLE taProperty (
idProperty SERIAL PRIMARY KEY,
всякие_неизменяемые_поля
);
-- это может изредка меняться
CREATE TABLE taDescription (
idDescription SERIAL PRIMARY KEY,
idProperty BIGINT UNSIGNED NOT NULL,
since TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
всякие_изменяемые_поля,
UNIQUE(idProperty, since),
FOREIGN KEY (idProperty) REFERENCES taProperty(idProperty) ON UPDATE CASCADE ON DELETE CASCADE
);
-- цены тоже могут меняться
CREATE TABLE taTermSale (
idTermSale SERIAL PRIMARY KEY,
idProperty BIGINT UNSIGNED NOT NULL,
agent VARCHAR(255) NOT NULL,
since TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
nPrice TINYINT UNSIGNED NOT NULL,
price DECIMAL(14, 4) NULL,
url VARCHAR(1024) NOT NULL,
UNIQUE(idProperty, since),
FOREIGN KEY (idProperty) REFERENCES taProperty(idProperty) ON UPDATE CASCADE ON DELETE CASCADE
);