по умолчанию ссылки каскадного уровня базы данных (DAL) web2py на каскад? - PullRequest
0 голосов
/ 09 января 2019

Когда я создаю базу данных в web2py, используя DAL, и я создаю таблицу для комментариев пользователей на моем веб-сайте, например, и мне нужно иметь возможность получить пользователя, который отправил этот конкретный комментарий, я могу сделать это по электронной почте ..
Однако электронные письма могут со временем меняться (возможный вариант), и сама база данных может в конечном итоге искать несуществующего пользователя, если электронное письмо не обновляется во всех «дочерних» таблицах, которые используют это электронное письмо в качестве ссылки от 1 до 1 для этого пользователя.
По этой причине мне нужно было бы автоматически обновить все внешние ключи в дочерних таблицах, поэтому эта функция (обновление каскадных внешних ключей) присутствует и по умолчанию при использовании DAL / можно ли указать соединению DAL сделать это добавить updateoncascade=True в необходимые Field("name", type="type", notnull=True, updateoncascade=True) поля?

1 Ответ

0 голосов
/ 09 января 2019

DAL не предоставляет API для указания ON UPDATE CASCADE при создании таблицы, поэтому вам придется делать это извне. В качестве альтернативы вы можете использовать _after_update hook для обновления записей в любых дочерних таблицах.

Также подумайте, хотите ли вы установить внешний ключ для адреса электронной почты, а не использовать встроенную функцию поля reference, которая создает внешний ключ в поле id родительской таблицы. Поскольку id данной пользовательской записи никогда не изменится, вам не нужно беспокоиться о каскадных обновлениях:

db.define_table('comments',
    ...,
    Field('author', 'reference auth_user'))

Выше 'reference auth_user' устанавливает внешний ключ для поля db.auth_user.id.

...