Как создать реляционную базу данных с первичным и внешним ключами в Phpmyadmin? - PullRequest
0 голосов
/ 07 ноября 2019

Я установил XAMPP на свой компьютер с Windows, запустил модули Apache и MySQL и выбрал http://localhost, а затем нажал на phpmyadmin. Я создал базу данных и создал таблицу.

Эта таблица называлась школами и имела столбец с именем ID. Я дал этому столбцу первичный индекс. В таблице также был еще один столбец под названием «Имя», в котором содержалось название школы.

Затем я создал еще одну таблицу под названием «Пользователи», и в этой таблице я создал столбец с именем schoolID, который дал индекс. В таблице также были другие столбцы, такие как имя и фамилия. Затем я перешел на вкладку конструктора базы данных в phpmyadmin и нажал кнопку «Создать связь». Затем я сначала щелкнул по первичному ключу в таблице школ и во-вторых нажал на индекс школьного идентификатора для таблицы пользователей.

Затем мне сказали, что связь была успешно создана, однако я не увидел зеленой линии, соединяющей эти два ключа. и когда я пошел вставлять в таблицу «пользователи» ... мне не дали раскрывающийся список возможных школ, которые можно было бы подключить по школьным идентификаторам, и не было никаких признаков того, что два поля были связаны. Как будто нет никаких отношений вообще.

Если я попытаюсь снова создать отношение, оно просто выдаст мне ошибку 1062 «Внутренние отношения не могут быть добавлены - Дублирующая запись« testdatabase-testdatabase.users-school »для ключа« PRIMARY »»

Затем я перешел на REMOTEMYSQL.COM и создал базу данных, выполнив ТОЛЬКО те же самые шаги, чтобы убедиться, что она работает отлично. Почему мой сервер XAMPP не создает отношений и что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Я создал столбец с именем schoolID, в котором дал индекс ..

Я не уверен, что вы подразумеваете под этим. Вы хотите создать список школ, с которыми пользователь связан / находится в отношениях?

Попробуйте настроить таблицы следующим образом:

школьный стол

id = auto-increment // <-- your primary key
name = varchar(255)

id | name
----------
1 | Hogwarts
2 | Hard Knocks

таблица пользователей

id = auto-increment // <-- primary key 
name = varchar(255)
school_id = int

id | name | school_id
----------
1 | John Doe | 1 
2 | Jane Doe | 1 
3 | Foo Bar | 2 

Извлечение всех пользователей, идущих в Хогвартс:

SELECT * 
FROM users 
WHERE school_id = 1;

Извлечение всех пользователей, посещающих школу жестких ударов!

SELECT * 
FROM users 
WHERE school_id = 2;

Вы можете изменить это, очевидно, но, надеюсь, этоуказывает вам в правильном направлении. Попробуйте начать использовать MySQL из командной строки. Это поможет вам действительно сосредоточиться на написании запросов, а не полагаться на phpmyadmin или что-то еще.

0 голосов
/ 07 ноября 2019

Это не имеет ничего общего с XAMPP, а PMA.

Клиент важен, но я считаю, что последний PMA должен поддерживать целостность.

Убедитесь, что ваши таблицы созданы как InnoDB, а не MyISAM. Кроме того, если вы испытали другие RDBMS, прежде чем вы можете увидеть некоторые сюрпризы. Прежде всего, я не думаю, что вы можете увидеть выпадающий список в PMA.

Еще один способ проверить целостность - это просмотреть таблицу с помощью FK (пользователи в вашем случае). Поле с FK должно быть показано как ссылка.

...