Russian Qt Forum
Ноябрь 24, 2024, 13:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по IBExpert  (Прочитано 7523 раз)
Astrologer
Гость
« : Октябрь 07, 2010, 09:31 »

Скачал, установил. Создаю две таблицы.

master:
Код:
/******************************************************************************/
/***               Generated by IBExpert 07.10.2010 10:30:23                ***/
/******************************************************************************/



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/



CREATE TABLE MASTER (
    ID  INTEGER NOT NULL
);




/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE MASTER ADD CONSTRAINT PK_MASTER PRIMARY KEY (ID);


/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/

slave:
Код:
/******************************************************************************/
/***               Generated by IBExpert 07.10.2010 10:27:55                ***/
/******************************************************************************/



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/



CREATE TABLE SLAVE (
    ID  INTEGER
);




/******************************************************************************/
/***                              Foreign Keys                              ***/
/******************************************************************************/

ALTER TABLE SLAVE ADD CONSTRAINT FK_SLAVE_1 FOREIGN KEY (ID) REFERENCES MASTER (ID) ON DELETE CASCADE ON UPDATE CASCADE;


/******************************************************************************/
/***                               Privileges                               ***/
/*****************************************************************************/


После вставки в master, данные в slave не обновляются. Транзакции завершаю, вижу что запись прошла в master таблице. В slave - все так же пусто. Что я не так делаю? Заранее спасибо.
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #1 : Октябрь 07, 2010, 10:10 »

А шо бы ви хотели шоб было?
Записан
Astrologer
Гость
« Ответ #2 : Октябрь 07, 2010, 10:13 »

Чтобы данные при вставке в master вставлялись бы и в slave.
Записан
Astrologer
Гость
« Ответ #3 : Октябрь 07, 2010, 10:46 »

Видимо надо написать триггер after insert, чтобы вставлялось. Еще бы знать как  Смеющийся
« Последнее редактирование: Октябрь 07, 2010, 10:52 от Astrologer » Записан
Astrologer
Гость
« Ответ #4 : Октябрь 07, 2010, 11:12 »

Код:
CREATE OR ALTER trigger master_ai0 for master
active after insert position 0
AS
begin
INSERT into slave values (NEW.id);
end
« Последнее редактирование: Октябрь 07, 2010, 11:27 от Astrologer » Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #5 : Октябрь 07, 2010, 12:18 »

На всякий случай семантика терминов Master-Slave:

Одной записи в Master-таблице может соответствовать много записей в Slave-таблице.

Пример:

Код:
Department
ID - PK
Name

Employee
ID
DepartmentID - FK
Name

ID, DepartmentID - PK
Записан
vlad-mal
Гость
« Ответ #6 : Октябрь 16, 2010, 22:41 »

2 Astrologer: нет никаких master и slave, это все выдумки.

Master - detail.

Detail связывается с master c помощью FK - ограничения.
Если хочешь, чтобы при изменении ключевого поля в master менялись значения в detail's, при создании fk - ограничения укажи опцию 'cascade' на операцию "изменение".

Однако, обычно это безобразие и волюнтаризм: первичные ключи меняться не должны.
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #7 : Октябрь 17, 2010, 13:14 »

2 Astrologer: нет никаких master и slave, это все выдумки.

Master - detail.

Detail связывается с master c помощью FK - ограничения.
Если хочешь, чтобы при изменении ключевого поля в master менялись значения в detail's, при создании fk - ограничения укажи опцию 'cascade' на операцию "изменение".

Однако, обычно это безобразие и волюнтаризм: первичные ключи меняться не должны.


Если в качестве первичного ключа задавать, напр., текстовое название отдела, а в detail т-це сотрудников делать FK надо это поле, то каскадный апдейт вполне обоснован.
Более того, различные нормализации схемы БД так и говорят делать. Только понятно, что в реальной жизнь, если БД достаточно большая, в качестве PK лучше делать int ID.
Записан
sarbash
Гость
« Ответ #8 : Октябрь 21, 2010, 22:24 »

В качестве первичного ключа всегда лучше использовать суррогатный, если натуральный не целочисленный. Из соображений быстродействия и производительности.
Записан
Zmeishe
Гость
« Ответ #9 : Октябрь 22, 2010, 09:45 »

Попала мне одна базища по ЖКХ.
В качестве ключа был номер лицевого счёта, благо в integer укладывался.
В куче таблиц куча триггеров.
Триггеры срабатывали если изменялось значение лицевого счёта в ячейке.
Например, нужно было ошибочно зачисленные деньги перебросить с одного лицевого на другой.

А теперь представьте в какой даун должен был уйти сервак со всеми этими каскадными обновлениями,
когда понадобилось сменить нумерацию всех лицевых счетов с 7-ми цифр до 9-ти.

Поэтому только суррогатный ключ.
Натуральный хорош в хранилище данных, где нет никакой математики.

Записан
vlad-mal
Гость
« Ответ #10 : Октябрь 27, 2010, 03:44 »

1. Забавная статья: "Ключи или отмычки" : http://www.alexus.ru/russian/articles/dbms/keys/index.htm  Шокированный

2. Естественно, статья Тенцера "Естественные ключи против искусственных ключей" : http://ibase.ru/devinfo/NaturalKeysVersusAtrificialKeysByTentser.html
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.