Когда использовать «ОБНОВЛЕНИЕ КАСКАДА»

Вышеуказанные ответы были правильными, но я считаю более сложными, чем это необходимо, и кулинарная книга полезна. Итак, вот что, кажется, работает для меня:

В контроллере представления, который устанавливает и вызывает pageViewController, объявляет:

@property (assign)              BOOL pageIsAnimating;

и в viewDidLoad:

    pageIsAnimating = NO;

добавьте это:

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers {
    pageIsAnimating = YES;
}

и добавьте пару строк:

- (void)pageViewController:(UIPageViewController *)pageViewController
    didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers
   transitionCompleted:(BOOL)completed {
    if (completed || finished)   // Turn is either finished or aborted
        pageIsAnimating = NO;
    ...
}

Жесты подавляются путем отказа от предоставления информации о контроллере просмотра:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
   viewControllerAfterViewController:(UIViewController *)viewController {
    if (pageIsAnimating)
        return nil;
    ...
    return after;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
  viewControllerBeforeViewController:(UIViewController *)viewController {
    if (pageIsAnimating)
        return nil;
    ...
    return before;
}

Ох, а изменения ориентации сбросят флаг:

- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController
               spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation {
    pageIsAnimating = NO;
    ...
}
395
задан Gray 6 June 2016 в 22:15
поделиться

3 ответа

Это правда, что если ваш первичный ключ - это просто автоматически увеличиваемое значение идентичности, вам не будет никакого реального использования ON UPDATE CASCADE.

Однако, допустим, ваш первичный ключ - 10 цифровой штрих-код UPC, и в связи с расширением его необходимо изменить на 13-значный штрих-код UPC. В этом случае ON UPDATE CASCADE позволит вам изменить значение первичного ключа, и любые таблицы, в которых есть ссылки внешнего ключа на это значение, будут изменены соответствующим образом.

Что касается # 4, если вы измените дочерний идентификатор на что-то, что не существует в родительской таблице (и у вас есть ссылочная целостность), вы должны получить ошибку внешнего ключа.

455
ответ дан 22 November 2019 в 23:33
поделиться
  1. Да, это означает, что, например, если вы выполните UPDATE parent SET id = 20 WHERE id = 10 , все дочерние parent_id из 10 также будут обновлены до 20

  2. Если вы не обновите поле, на которое ссылается внешний ключ, этот параметр не нужен

  3. Не могу придумать другого использования.

  4. Вы не можете этого сделать, поскольку ограничение внешнего ключа не сработает.

83
ответ дан 22 November 2019 в 23:33
поделиться

Я думаю, вы в значительной степени добились цели!

Если вы следуете передовым методам проектирования баз данных и ваш первичный ключ никогда не обновляется (что, я думаю, всегда должно быть так), тогда вам никогда не понадобится предложение ON UPDATE CASCADE .

Зед указал на то, что если вы используете естественный ключ (например, обычное поле из вашей базы данных table) в качестве первичного ключа, то могут возникнуть определенные ситуации, когда вам потребуется обновить первичные ключи. Еще один недавний пример - это ISBN (Международный стандартный номер книги), который не так давно изменился с 10 до 13 цифр + символы.

Это не тот случай, если вы решите использовать суррогат (например,

27
ответ дан 22 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: