Re[2]: Ограничиться одной записью
От: Roman Odaisky Украина  
Дата: 07.04.08 12:12
Оценка:
Здравствуйте, 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
);
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.