PDA

Просмотр полной версии : [Вопрос] ID в таблице mysql



kushichka
07.07.2016, 01:46
Я не совсем понимаю, зачем при создании таблицы аккаунтов нужно создавать колонку ID? Как ее можно использовать кроме как идентификатор строки?

Sp1ke
07.07.2016, 02:11
Я не совсем понимаю, зачем при создании таблицы аккаунтов нужно создавать колонку ID? Как ее можно использовать кроме как идентификатор строки?

Это конечно мое предположение, но оно логичное: обработка запроса с int значением ID аккаунта выполняется быстрее, чем по нику (потом возможно проверю и скажу точно)
И это удобнее, но опять же по моему мнению. Если делать какую-то реализацию с ником игрока то можно допустить ошибку ведь некоторые символы бывают похожи, как I и l.
В моем моде все реализовано на ID аккаунта, вот допустим загрузка домов работает так: если ID владельца не равен 0, то значит дом занят и в БД выполняется запрос на поиск такого аккаунта, если он найден то загружается имя владельца дома, а если такого аккаунта не найдено то дом продается.

kushichka
07.07.2016, 04:09
если ID владельца не равен 0, то значит дом занят и в БД выполняется запрос на поиск такого аккаунта, если он найден то загружается имя владельца дома, а если такого аккаунта не найдено то дом продается.
ID владельца на сервере или в бд? Просто, в основном, при сохранении/загрузке данных используется id игрока на сервере, а вот с id в бд не могу догнать что делать.

TheMallard
07.07.2016, 07:50
Идентификатор аккаунта используется для работы с домами, бизнесами, машинами, etc... Это облегчает смену ника, то есть если игрок захочет сменить ник, то он будет изменен только в базе аккаунтов, а в базе домов/бизнесов/машин ничего не поменяется.

DeimoS
07.07.2016, 12:56
Вот тут (http://pro-pawn.ru/showthread.php?14002-%D0%91%D0%B0%D0%B7%D1%8B-MySQL&p=74600&viewfull=1#post74600) Ziggi прекрасно описал как можно с помощью AUTO_INCREMENT облегчить работу с таблицами

$continue$
07.07.2016, 19:55
Вот.

Советую.

https://www.youtube.com/watch?v=P2Eaf9M4gOU&list=PLY4rE9dstrJwFmPYd03vZU90-TvXEpVzD

P.S: Там серия уроков (5 уроков)

kushichka
07.07.2016, 23:50
Пример ziggi

Игрок
----------------
id | ник | ...
----------------
0 | test | ...
1 | test2 | ...

Навыки
-------------
id | название
-------------
0 | навык1
1 | навык2
2 | навык3
3 | навык4

НавыкиИгрока
--------------------------
id | id_навыка | id_игрока
--------------------------
0 | 0 | 0
1 | 2 | 0
2 | 0 | 1
3 | 1 | 1
4 | 2 | 1
5 | 3 | 1

В цикле видео уроков, предоставленного выше, приводится такая структура:


Игрок
-------------------------
id | ник | id_навыка
-------------------------
0 | test | 1
1 | test2 | 3

Навыки
-------------
id | название
-------------
0 | навык1
1 | навык2
2 | навык3
3 | навык4

Как будет лучше? И удобно ли будет хранить в таблице аккаунтов в ячейке id_навыка несколько значений?

- - - Добавлено - - -


Вот.

как я понял, что бы связать несколько таблиц нужно в создать внешний ключ. Как правильно его создавать в phpmyadmin?

DeimoS
07.07.2016, 23:59
Как будет лучше? И удобно ли будет хранить в таблице аккаунтов в ячейке id_навыка несколько значений?

Ну а ты как думаешь? Удобно ли будет каждый раз форматировать столбец с навыками, добавляя новый навык, или же проще создать отдельную таблицу, где для каждого навыка у каждого игрока будет своя строка? И лучше думай насчёт удаления одного из навыков, а не о добавлении новых.

kushichka
08.07.2016, 00:04
Ну а ты как думаешь? Удобно ли будет каждый раз форматировать столбец с навыками, добавляя новый навык, или же проще создать отдельную таблицу, где для каждого навыка у каждого игрока будет своя строка? И лучше думай насчёт удаления одного из навыков, а не о добавлении новых.

А количество таких свзязных таблиц никак не сказывается на скорости?

DeimoS
08.07.2016, 01:00
А количество таких свзязных таблиц никак не сказывается на скорости?

Естественно на обработку запросов уйдёт больше времени, но не существенно больше. Тут суть в упрощении работы с базой данных, а, следовательно, с увеличением удобности.
Да и даже если ты всё сделаешь в одной БД, ты:
1) Так же будешь тратить время на работу с данными для форматирования одной общей строки для всех навыков
2) Усложнишь работу с таблицей (будет сложнее её читать, когда данных наберётся приличное кол-во)
В общем, те временные затраты, которых ты так боишься в случае с несколькими таблицами, могут быть гораздо меньше, если ты будешь одну таблицу для всего использовать

kushichka
08.07.2016, 01:34
При создании таблицы в phpmyadmin по умолчанию стоит тип таблицы InnoDB. Это значит что не нужно делать дополнительных манипуляций по привязке нескольких таблиц?
http://ihost.pro-pawn.ru/image.php?di=FO9O

DeimoS
08.07.2016, 01:46
При создании таблицы в phpmyadmin по умолчанию стоит тип таблицы InnoDB. Это значит что не нужно делать дополнительных манипуляций по привязке нескольких таблиц?
http://ihost.pro-pawn.ru/image.php?di=FO9O

Достаточно просто вбить в гугл "InnoBD" и узнаешь ответ.
Связкой таблиц ты будешь заниматься, создавая определённые поля и заполняя их определёнными запросами

kushichka
08.07.2016, 01:53
Достаточно просто вбить в гугл "InnoBD" и узнаешь ответ.
Связкой таблиц ты будешь заниматься, создавая определённые поля и заполняя их определёнными запросами

Я сделал такой вывод исходя из ролика выше, точнее из второй его части. Там говорится что для создания механизма внешних ключей, необходимо выбрать подсистему вывода данных InnoDB. Но только там все манипуляции происходили в терминале linux, вот мне и интересно ничего ли больше не нужно делать, кроме выбора этой подсистемы в phpmyadmin.. А так я в принципе все понял, огромное спасибо.

https://youtu.be/u4Tfr3hgXu0?t=7m35s

$continue$
08.07.2016, 01:57
phpmyadmin - веб морда над консолью жи.

kushichka
08.07.2016, 02:17
phpmyadmin - веб морда над консолью жи.

да, но в консоли он там еще делал разные приписки, вот и думаю, phpmyadmin задаст их так же по умолчанию или нет.

DeimoS
08.07.2016, 02:18
Связкой таблиц ты будешь заниматься, создавая определённые поля и заполняя их определёнными запросами

:big_boss:

$continue$
09.07.2016, 11:53
В phpmyadmin есть своя консоль оттуда можешь выполнять те же запросы, что и он.

да, но в консоли он там еще делал разные приписки, вот и думаю, phpmyadmin задаст их так же по умолчанию или нет.