Ошибка при создании связи в

Цитата
Сообщение от Metall_Version
Посмотреть сообщение

Циклическое каскадное удаление/обновление просто не допустимо, поэтому субд не дает это сделать.

На самом деле есть ситуации, когда очевидно, что каскадное удаление/обновление
никаких циклов не создаёт, однако сервер утверждает обратное и не разрешает создать такие FK.
MS на своём сайте поддержки обычно отвечает, что это «by design», и точка.
Правда, непонятно, относится ли данная тема к такому случаю. Или и правда имеются циклические каскадные операции.

Цитата
Сообщение от Metall_Version
Посмотреть сообщение

что есть естественные айди?

В отличие от суррогатных, естественные ключи не генерируются сервером,
а имеют определённый смысл в реальном мире.
Например, «Серия и номер паспорта», «ИНН», «Фамилия, Имя, Отчество» и т.п.
Непонятно, правда, при чём тут естественные ключи.

Не удается создать связь между таблицами. Что делать?

60927df353f25588433512.png

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


  • Вопрос задан

    более двух лет назад

  • 235 просмотров

Связь не устанавливается — такие утверждения нужно конкретизировать)
Наверное, выдает ошибку о том, что foreign key ссылается на несуществующие записи?
В таком случае, нужно сначала все связуемые таблицы проверить JOIN’ами и найти потенциальные несоответствия, потом решить что с ними делать — либо удалить, либо создать недостающие записи.
(Прошу прощения — ошибку на скрине не сразу заметил).

Пригласить эксперта


  • Показать ещё
    Загружается…

14 июн. 2023, в 05:15

3500 руб./за проект

14 июн. 2023, в 03:49

3000 руб./за проект

14 июн. 2023, в 03:45

4000 руб./за проект

Минуточку внимания

The primary key in the Person table is presumably an identity. This is an auto-incrementing integer field.

You need to make the foreign key in the address table of type int, not identity. It will hold integers which correspond to Person records, but you don’t want the foreign key to auto-increment. For each record in the child table (address) you will set a specific value for the foreign key indicating to which parent record (Person) it belongs.

Example:

INSERT person (firstname, lastname) VALUES ('John', 'Smith')

This will insert the new person record and the field personid will be filled automatically because it is an IDENTITYfield.

Now to insert an address from John Smith you need to know his personid. For example:

-- Say, for example, personid of John Smith is 55
INSERT address (personid, street, city) VALUES (55, 'High Street', 'London')

So in the person table the personid is generated automatically but in the address table you specify the value that matches an existing person. That’s the whole point of a foreign key.

Without more information about your schema it’s hard to guess the problem.

Платные услуги для вашего проекта

  • Консалтинг и техническая поддержка

    Запросы в рамках коммерческой поддержки имеют гарантированное время ответа

  • Разработка на заказ

    Предоставляем разработку полностью нашими рабочими ресурсами или участвуем в создании вашего проекта

  • Обучение

    Для быстрого и всестороннего освоения особенностей платформы, чтобы повысить продуктивность вашей команды

Haulmont

мы разрабатываем современные корпоративные решения

  • Эксперты в области разработки корпоративного ПО

  • Создатели CUBA Platform

  • Компания основана в 2008

  • 300+

    разработчиков

  • 400+

    проектов

  • Клиенты в

    60+

    странах

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

Настройка

Перед тем как начать, убедитесь, что PhpMyAdmin запущен и работает. Если вы залогинитесь, то, возможно, обратите внимание на сообщение следующего вида:

The phpMyAdmin configuration storage is not completely configured, some extended features have been deactivated. To find out why click here.
(Хранилище конфигураций phpMyAdmin не настроено должным образом, некоторые возможности отключены. Чтобы узнать почему, нажмите здесь)

При клике на ссылку here (“здесь”), вас направят на страницу с пояснением того, что вы не активировали все возможности. Активировать их можно, добавив следующие строки в файл config.inc.php.

$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'pmapass';
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
$cfg['Servers'][$i]['favorite'] = ‘pma__favorite’;
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';

Смените имя пользователя, пароль и имя базы данных по вашему собственному усмотрению. Остальные конфигурационные значения — это имена таблиц. Если оставить их пустыми, то вы отключите соответствующие им возможности. Но вообще, я бы рекомендовал оставить эти названия как есть. В зависимости от версии PhpMyAdmin не все значения будут доступны по умолчанию. В данном случае я использовал версию PhpMyAdmin 4.2.x.

Когда вы закончите с конфигом, нужно будет создать базу данных. Создайте базу данных с именем, которое вы указали в вашем конфигурационном файле. Далее поищите файл с названием create_tables.sql на вашей машине. Скорее всего, данный файл будет находиться в корневой директории установленного PhpMyAdmin, или в поддиректории scripts. Если у вас Linux, то расположение будет следущим /usr/share/phpMyAdmin/examples/ или /usr/share/doc/phpmyadmin/scripts/. Запустите этот файл в рамках созданной базы данных. Если вы меняли имена таблиц в вышеприведенном конфиге, не забудьте поменять их также и в базе данных.

Далее нам нужно создать пользователя с паролем, данные которого мы указали в конфиге. Выполните ниже приведенные запросы, не забыв подставить нужные имя пользователя и пароль.

GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass';
GRANT SELECT (
    Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
    Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv,
    File_priv, Grant_priv, References_priv, Index_priv, Alter_priv,
    Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv,
    Execute_priv, Repl_slave_priv, Repl_client_priv
    ) ON mysql.user TO 'pma'@'localhost';
GRANT SELECT ON mysql.db TO 'pma'@'localhost';
GRANT SELECT ON mysql.host TO 'pma'@'localhost';
GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
    ON mysql.tables_priv TO 'pma'@'localhost';

GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost';

Завершив сеанс с PhpMyAdmin и войдя снова, мы должны увидеть, что предупреждение исчезло. Если не пропало, кликните по ссылке, чтобы узнать, чего же не хватает.

Давайте рассмотрим дополнительные возможности.

Закладки

Включив расширение bookmark, у вас появится возможность добавлять запросы в закладки. При создании запроса его можно добавить в закладки. Также, если запрос уже был запущен, вы можете добавить его в закладки, прокрутив страницу до низу, и заполнив форму.

При переходе на вкладку SQL, внизу вы увидите панель, на которой можно выбрать запрос из закладок. Выберите нужный, и укажите, что вы хотите с ним сделать: выполнить, просмотреть, или удалить.

Связи

Опция relation пожалуй, лучшая вещь, которой мне приходилось пользоваться. Если вы используете внешние ключи, то такие ключи станут кликабельны. При клике по внешнему ключу, вы будете переведены на другую таблицу: на ту запись, на которую ссылается внешний ключ.

Также при добавлении или редактировании внешнего ключа вместо текстового поля ввода вам будет предложен список всех возможных вариантов.

Информация о таблице

Конечно, видеть список со всеми возможными значениями для внешнего ключа хорошо. Но было бы еще лучше, если бы нам показывался конкретный столбец вместо ID. Чтобы этого добиться, нужно включить able_info. Перейдите к основной таблице, перейдите на вкладку “Структура”, и кликните на ссылку просмотра связи. Если вы прокрутите страницу до низу, то увидите, какой столбец будет отображаться по этому ключу.

Если я создам новую запись с внешним ключом, то рядом со значением первичного ключа я увижу значение из указанной мной колонки. Теперь нет необходимости запоминать идентификатор.

Страницы PDF

Связи между таблицами можно экспортировать в PDF. Для этого в конфиге нужно активировать pdf_pages, table_coords и relation. Следующим шагом откройте базу данных, которую вы хотите экспортировать в PDF. Кликните на вкладку “Операции”. Далее кликните по ссылке “Редактировать или экспортировать схему связей”. Заполните все поля и нажмите “Отправить”. Если вы заполнили форму — то у вас появится PDF файл со всеми необходимыми данными.

Информация о столбцах

С помощью опции column info вы можете добавлять комментарии к названиям столбцов. Это может быть полезным, когда вы хотите донести до других людей, что это за столбец, и какие данные в нем хранятся. Сделать это можно, изменив данные столбца. Вы можете заметить, что к столбцу был добавлен новый комментарий. Если вы введете комментарий, то он появится прямо под именем столбца.

Таким же образом к столбцам можно применять преобразования. С помощью преобразований вы можете сделать имя файла гиперссылкой, которая откроет указанный файл.

История

Если включить history, то все запросы, выполняемые через PhpMyAdmin будут сохраняться в вашей истории, до тех пор пока вы не завершите сеанс, или не закроете браузер. Историю можно просмотреть, вызвав диалоговое окно “Запрос”, и нажав кнопку “История SQL”

Недавние

На навигационной панели вы можете заметить кнопку “Недавние”, которая содержит выпадающий список таблиц, которые вы недавно просматривали. Этот список отображается по-умолчанию. Но если вы хотите хранить его постоянно между сессиями, можете включить опцию recent в конфиге, и ваша история посещений будет сохранена в базе.

Настройки отображения таблицы

Просматривая таблицы, вы можете изменять порядок столбцов перемещением. Эти изменения видимы только вам. Настоящий порядок столбцов при этом не изменяется. В дополнение вы также можете сортировать столбцы по возрастанию и по убыванию. Такие изменения хранятся в пределах сессии, а при разлогировании будут сброшены и заменены на настройки по-умолчанию. Однако, если вы хотите, чтобы таблицы выгладили “по-вашему” всё время, то активируйте опцию table_uiprefs.

Пользователи и группы пользователей

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

Скрытие навигации

С помощью navigationhiding вы можете скрывать некоторые таблицы в панели навигации. При клике на иконку лампочки рядом с именем таблицы, вы её скроете. Так же можете снова сделать ее видимой, повторно кликнув на иконку лампочки. Таким образом вы разгрузите панель навигации от неиспользуемых таблиц.

Отслеживание

С помощью данной возможности вы можете отследить все изменения, которые были проведены над конкретными таблицами с помощью PhpMyAdmin. Перейдя к таблице, и открыв вкладку “Слежение”, можно создать версию текущей таблицы. Теперь все изменения, которые были проделаны над этой таблицей с помощью PhpMyAdmin, будут сохраняться. Таким же образом можно легко определить, какие изменения были произведены в таблице с момента создания последней версии.

Пользовательские настройки

Все пользовательские настройки по-умолчанию хранятся в вашем браузере. Это означает, что если вы решите воспользоваться другим браузером, или почистите кеш браузера, все ваши настройки пропадут. Активировав userconfig вы сохраните ваши настройки в базе данных на постоянной основе.

Координаты дизайнера баз данных

Включив designer_coords, вы можете просматривать связи между вашими таблицами в режиме дизайнера баз данных. Перейдя в базу данных и кликнув по вкладке “Дизайнер”, вы увидите нечто похожее на нижеприведенное изображение, на котором представлены связи между таблицами. Вместе с тем вы можете визуально управлять связями между таблицами с помощью этого окна.

Избранное

Включив опцию favorite, в режиме просмотра базы данных вы можете заметить появление иконок звездочек около названий таблиц. Для добавления таблицы в избранное, достаточно кликнуть по звездочке. В панели навигации вы увидите выпадающий список “Избранное”. Таблицы, которые вы добавили в избранное, появятся в этом списке.

Сохранение параметров поиска

Открыв базу данных и перейдя на вкладку “Запрос”, вы можете настроить расширенный поиск. Параметры поиска можно добавить в закладки. Отмечу, что это не закладки SQL-запросов, рассмотренные ранее. С помощью этой опции вы можете сохранить параметры поиска, и использовать их позже.

Заключение

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при создании сводной таблицы в excel
  • Ошибка при создании русской темы
  • Ошибка при создании риб в 1с
  • Ошибка при создании рекламы в инстаграм
  • Ошибка при создании резервной копии вайбер на айфон