MySQL (F.A.Q.)

Quote:
Originally Posted by Davidoff
Посмотреть сообщение
Всем привет!
Имеются 2 таблицы:
Accounts: id | name | pass | chars
Characters: id | from | name | level
Вопрос: Как лучше привязать к аккаунту персонаж?
Путём имя аккаунта с полей "from"? String
Или путём id аккаунта с полей "from"? Int
И на последок, как привязать эти поля к друг другу? На примере пожалуйста.
Уточните, в какой базе они имеются.
Полагаю, речь идет о MySQL, и о движке MyISAM, который используется чаще всего (если не ошибаюсь, по умолчанию).
Реляционные СУБД как раз и были разработаны для таких задач.

Отвечу кратко - добавьте внешний уникальный ключ в таблицу Characters на Accounts.id
PHP код:
ALTER TABLE `Characters`  # Изменить таблицу Characters
ADD COLUMN `accountINT(11NULL# Добавить поле 'account' (должно иметь тот же тип данных, что и Accounts.id), NULL значит "разрешить использовать пустое значение" (в вашем случае это значит "персонажам могут быть не назначены аккаунты" - полезно, например, при передаче аккаунта, но если вы это делать не планируете, напишите NOT NULL)
ADD UNIQUE INDEX `account` (`account`), # Добавить уникальный индекс 'account' на одноименное поле. Это не позволит добавить в таблицу две записи с одинаковой ссылкой на аккаунт (акканут не сможет иметь больше 1 персонажа). Если вы хотите дать возможность игрокам создавать несколько персонажей на один аккаунт, не пишите эту строку
ADD CONSTRAINT `fk_account_characterFOREIGN KEY (`account`) REFERENCES `Accounts` (`id`) ON UPDATE CASCADE ON DELETE CASCADE# Добавить внешний ключ Character.account к Accounts.id, при изменении ID аккаунта - изменять соответственно Character.account, при удалении аккаунта соответственно удалять персонажей аккаунта 
Не слушайте тех, кто утверждает, будто связи в базе данных вам только головную боль добавят. Все как раз наоборот. Связи позволяют держать базу в целом виде - вы будете уверены в том, что аккаунты не ссылаются на несуществующих персонажей. Также обратите внимание на ON UPDATE и ON DELETE - в примере выше, если удалить запись из Accounts, все связанные персонажи также будут удалены - как это применить вы можете решить сами (также можно автоматически установить NULL или запретить удаление аккаунта, если у него есть связанный персонаж), а если ID персонажа изменится, он также изменится во всех связанных таблицах.

Кстати, пример выше должен выглядеть так
PHP код:
SELECT Characters .* 
FROM CharactersAccounts
WHERE Accounts
.name "Davidoff"
AND Characters.account Accounts.id 
Думаю, в Интернете полно информации о всем выше написанном, если чего-то не нашли или не поняли, спрашивайте сюда

P.S> Я ответил на вопрос, в котором нет ничего про скрипты и программы. Скажу еще вот что - использование связей в субд сохраняет целостность базы, и не освобождает от проверок в скриптах игрового мода. Это значит, что вы по-прежнему должны проверять, существуют ли аккаунты, которым вы создаете персонажей и т.п.
Кстати, СуБД со связями между сущностями может вас обругать, но только если ваши скрипты работают неправильно или происходят какие-то сбои. Поверьте, лучше один раз увидеть ошибку и не создать новому игроку персонаж, чем через полгода обнаружить сотни аккаунтов без персонажей или, что еще хуже, с одинаковыми ID персонажей
Reply


Messages In This Thread
MySQL (F.A.Q.) - by Stepashka - 22.01.2014, 17:44
Re: MySQL (F.A.Q.) - by Stepashka - 22.01.2014, 17:45
Что такое лэйблы и как использовать as. - by Stepashka - 22.01.2014, 18:31
Re: MySQL (F.A.Q.) - by hub4 - 23.01.2014, 06:20
Re: MySQL (F.A.Q.) - by Stepashka - 23.01.2014, 06:52
Re: MySQL (F.A.Q.) - by Urukhay - 23.01.2014, 12:15
Re: MySQL (F.A.Q.) - by Nazarik - 27.01.2014, 10:36
Re: MySQL (F.A.Q.) - by Splav - 27.01.2014, 11:04
Re: MySQL (F.A.Q.) - by Stepashka - 27.01.2014, 11:36
Re: MySQL (F.A.Q.) - by ZiGGi - 27.01.2014, 13:14
Re: MySQL (F.A.Q.) - by Alexander_Petrov - 09.02.2014, 14:51
Re: MySQL (F.A.Q.) - by stabker - 10.02.2014, 18:53
Re: MySQL (F.A.Q.) - by Stepashka - 10.02.2014, 19:05
Re: MySQL (F.A.Q.) - by stabker - 10.02.2014, 20:10
Re: MySQL (F.A.Q.) - by Stepashka - 10.02.2014, 20:42
Re: MySQL (F.A.Q.) - by stabker - 10.02.2014, 20:52
Re: MySQL (F.A.Q.) - by Urukhay - 13.02.2014, 03:34
Re: MySQL (F.A.Q.) - by Stepashka - 13.02.2014, 07:20
Re: MySQL (F.A.Q.) - by Urukhay - 13.02.2014, 12:59
Re: MySQL (F.A.Q.) - by Stepashka - 13.02.2014, 13:01
Re: MySQL (F.A.Q.) - by Urukhay - 13.02.2014, 13:06
Re: MySQL (F.A.Q.) - by Alexander_Petrov - 13.02.2014, 13:16
Re: MySQL (F.A.Q.) - by Urukhay - 13.02.2014, 13:40
Re: MySQL (F.A.Q.) - by Alexander_Petrov - 13.02.2014, 13:57
Re: MySQL (F.A.Q.) - by Stepashka - 13.02.2014, 14:06
Re: MySQL (F.A.Q.) - by Urukhay - 13.02.2014, 14:17
Re: MySQL (F.A.Q.) - by Urukhay - 15.02.2014, 09:29
Re: MySQL (F.A.Q.) - by Stepashka - 15.02.2014, 09:49
Re: MySQL (F.A.Q.) - by Urukhay - 15.02.2014, 10:39
Re: MySQL (F.A.Q.) - by Stepashka - 15.02.2014, 11:47
Re: MySQL (F.A.Q.) - by Urukhay - 15.02.2014, 12:41
Re: MySQL (F.A.Q.) - by k3dr - 15.02.2014, 15:04
Re: MySQL (F.A.Q.) - by Stepashka - 15.02.2014, 15:06
Re: MySQL (F.A.Q.) - by k3dr - 15.02.2014, 15:48
Re: MySQL (F.A.Q.) - by Stepashka - 15.02.2014, 15:53
Re: MySQL (F.A.Q.) - by k3dr - 15.02.2014, 16:02
Re: MySQL (F.A.Q.) - by Alexander_Petrov - 16.02.2014, 14:58
Re: MySQL (F.A.Q.) - by Stepashka - 16.02.2014, 16:00
Re: MySQL (F.A.Q.) - by Nazarik - 17.02.2014, 05:57
Re: MySQL (F.A.Q.) - by Nazarik - 17.02.2014, 06:12
Re: MySQL (F.A.Q.) - by Jon_De - 25.03.2014, 18:27
Re: MySQL (F.A.Q.) - by Stepashka - 25.03.2014, 20:03
Re: MySQL (F.A.Q.) - by lost13 - 26.03.2014, 06:46
Re: MySQL (F.A.Q.) - by lost13 - 26.03.2014, 11:06
Re: MySQL (F.A.Q.) - by Stepashka - 26.03.2014, 11:34
Re: MySQL (F.A.Q.) - by OKStyle - 26.03.2014, 11:38
Re: MySQL (F.A.Q.) - by lost13 - 26.03.2014, 12:17
Re: MySQL (F.A.Q.) - by Stepashka - 26.03.2014, 12:34
Re: MySQL (F.A.Q.) - by lost13 - 26.03.2014, 13:06
Re: MySQL (F.A.Q.) - by eakwarp - 26.03.2014, 13:47
Re: MySQL (F.A.Q.) - by Stepashka - 26.03.2014, 14:11
Re: MySQL (F.A.Q.) - by Urukhay - 30.03.2014, 04:06
Re: MySQL (F.A.Q.) - by DartfoL - 30.03.2014, 07:06
Re: MySQL (F.A.Q.) - by Stepashka - 30.03.2014, 08:20
Re: MySQL (F.A.Q.) - by Urukhay - 30.03.2014, 13:02
Re: MySQL (F.A.Q.) - by Stepashka - 30.03.2014, 13:22
Re: MySQL (F.A.Q.) - by lost13 - 31.03.2014, 05:49
Re: MySQL (F.A.Q.) - by Stepashka - 31.03.2014, 06:17
Re: MySQL (F.A.Q.) - by Jon_De - 09.04.2014, 14:36
Re: MySQL (F.A.Q.) - by Stepashka - 09.04.2014, 14:45
Re: MySQL (F.A.Q.) - by OKStyle - 26.05.2014, 03:22
Re: MySQL (F.A.Q.) - by Nazarik - 26.05.2014, 11:08
Re: MySQL (F.A.Q.) - by Stepashka - 26.05.2014, 11:22
Re: MySQL (F.A.Q.) - by Stepashka - 04.07.2014, 17:17
Re: MySQL (F.A.Q.) - by Urukhay - 10.07.2014, 14:43
Re: MySQL (F.A.Q.) - by eakwarp - 10.07.2014, 14:46
Re: MySQL (F.A.Q.) - by Makar93 - 19.07.2014, 13:47
Re: MySQL (F.A.Q.) - by Stepashka - 19.07.2014, 14:05
Re: MySQL (F.A.Q.) - by Makar93 - 19.07.2014, 14:15
Re: MySQL (F.A.Q.) - by Stepashka - 19.07.2014, 14:17
Re: MySQL (F.A.Q.) - by Jon_De - 29.08.2014, 13:20
Re: MySQL (F.A.Q.) - by Stepashka - 29.08.2014, 13:23
Re: MySQL (F.A.Q.) - by stabker - 30.08.2014, 16:09
Re: MySQL (F.A.Q.) - by eakwarp - 30.08.2014, 16:32
Re: MySQL (F.A.Q.) - by Stepashka - 30.08.2014, 16:37
Re: MySQL (F.A.Q.) - by stabker - 30.08.2014, 16:41
Re: MySQL (F.A.Q.) - by Stepashka - 30.08.2014, 17:05
Re: MySQL (F.A.Q.) - by stabker - 30.08.2014, 17:12
Re: MySQL (F.A.Q.) - by Urukhay - 07.09.2014, 08:05
Re: MySQL (F.A.Q.) - by Stepashka - 07.09.2014, 08:11
Re: MySQL (F.A.Q.) - by Makar007 - 01.03.2015, 15:09
Re: MySQL (F.A.Q.) - by Oxsen - 02.03.2015, 20:22
Re: MySQL (F.A.Q.) - by ZiGGi - 02.03.2015, 22:19
Re: MySQL (F.A.Q.) - by CodeBreaker - 04.03.2015, 15:26
Re: MySQL (F.A.Q.) - by Dembel - 05.03.2015, 09:14
Re: MySQL (F.A.Q.) - by Stepashka - 05.03.2015, 09:53
Re: MySQL (F.A.Q.) - by Stepashka - 05.03.2015, 09:53
Re: MySQL (F.A.Q.) - by Dembel - 05.03.2015, 10:00
Re: MySQL (F.A.Q.) - by Stepashka - 05.03.2015, 10:10
Re: MySQL (F.A.Q.) - by Dembel - 05.03.2015, 10:12
Re: MySQL (F.A.Q.) - by CamperGTA - 01.08.2015, 18:03
Re: MySQL (F.A.Q.) - by Stepashka - 01.08.2015, 18:25
Re: MySQL (F.A.Q.) - by Stepashka - 01.08.2015, 19:28
Re: MySQL (F.A.Q.) - by Dembel - 01.08.2015, 21:39
Re: MySQL (F.A.Q.) - by nonamepawn - 01.10.2015, 15:02
Re: MySQL (F.A.Q.) - by xJester - 01.10.2015, 15:36
Re: MySQL (F.A.Q.) - by nonamepawn - 19.10.2015, 14:54
Re: MySQL (F.A.Q.) - by White_116 - 19.10.2015, 15:14
Re: MySQL (F.A.Q.) - by stabker - 19.10.2015, 15:21
Re: MySQL (F.A.Q.) - by White_116 - 19.10.2015, 15:39
Re: MySQL (F.A.Q.) - by Stepashka - 19.10.2015, 17:20
Re: MySQL (F.A.Q.) - by White_116 - 19.10.2015, 18:15
Re: MySQL (F.A.Q.) - by ZiGGi - 19.10.2015, 20:08
Re: MySQL (F.A.Q.) - by themakar - 02.01.2016, 18:00
Re: MySQL (F.A.Q.) - by Stepashka - 02.01.2016, 18:34
Re: MySQL (F.A.Q.) - by themakar - 02.01.2016, 23:56
Re: MySQL (F.A.Q.) - by Davidoff - 03.01.2016, 08:49
Re: MySQL (F.A.Q.) - by Stepashka - 04.01.2016, 15:58
Re: MySQL (F.A.Q.) - by Davidoff - 04.01.2016, 19:46
Re: MySQL (F.A.Q.) - by stabker - 04.01.2016, 21:44
Re: MySQL (F.A.Q.) - by prineside - 05.01.2016, 00:46
Re: MySQL (F.A.Q.) - by Davidoff - 06.01.2016, 19:34
Re: MySQL (F.A.Q.) - by themakar - 28.03.2016, 16:11
Re: MySQL (F.A.Q.) - by ea8de1 - 28.03.2016, 16:20
Re: MySQL (F.A.Q.) - by ea8de1 - 13.04.2016, 14:58
Re: MySQL (F.A.Q.) - by Stepashka - 13.04.2016, 15:00
Re: MySQL (F.A.Q.) - by ea8de1 - 13.04.2016, 15:04
Re: MySQL (F.A.Q.) - by Stepashka - 13.04.2016, 16:19
Re: MySQL (F.A.Q.) - by ea8de1 - 13.04.2016, 16:22
Re: MySQL (F.A.Q.) - by themakar - 21.05.2016, 16:12
Re: MySQL (F.A.Q.) - by Eims - 09.11.2016, 21:04
Re: MySQL (F.A.Q.) - by S4D - 10.11.2016, 06:34
Re: MySQL (F.A.Q.) - by Stepashka - 10.11.2016, 08:08
Re: MySQL (F.A.Q.) - by Eims - 10.11.2016, 10:24
Re: MySQL (F.A.Q.) - by Sidorovich12 - 18.02.2017, 08:49
Re: MySQL (F.A.Q.) - by Mcc - 18.02.2017, 11:43
Re: MySQL (F.A.Q.) - by Bombo - 20.02.2017, 09:17
Re: MySQL (F.A.Q.) - by Sidorovich12 - 04.03.2017, 14:19
Re: MySQL (F.A.Q.) - by youngPimp - 20.06.2017, 13:00
Re: MySQL (F.A.Q.) - by Mcc - 20.06.2017, 13:48
Re: MySQL (F.A.Q.) - by cm666 - 21.06.2017, 20:42
Re: MySQL (F.A.Q.) - by youngPimp - 22.06.2017, 02:07
Re: MySQL (F.A.Q.) - by joker2020pro - 22.06.2017, 03:36
Re: MySQL (F.A.Q.) - by Eims - 07.09.2017, 14:20
Re: MySQL (F.A.Q.) - by ZiGGi - 07.09.2017, 15:15
Re: MySQL (F.A.Q.) - by Johhnyllll - 07.09.2017, 15:18
Re: MySQL (F.A.Q.) - by Eims - 07.09.2017, 16:15
Re: MySQL (F.A.Q.) - by pawnoholic - 23.03.2019, 20:59
Re: MySQL (F.A.Q.) - by Stepashka - 24.03.2019, 08:49
Re: MySQL (F.A.Q.) - by pawnoholic - 24.03.2019, 11:17
Re: MySQL (F.A.Q.) - by Stepashka - 24.03.2019, 11:26
Re: MySQL (F.A.Q.) - by Eims - 25.03.2019, 09:08
Re: MySQL (F.A.Q.) - by Stepashka - 25.03.2019, 11:21
Re: MySQL (F.A.Q.) - by Eims - 25.03.2019, 13:41
Re: MySQL (F.A.Q.) - by x_O - 21.04.2019, 19:33
Re: MySQL (F.A.Q.) - by Stepashka - 21.04.2019, 19:42
Re: MySQL (F.A.Q.) - by x_O - 21.04.2019, 20:02
Re: MySQL (F.A.Q.) - by Johhnyllll - 30.04.2019, 10:44
Re: MySQL (F.A.Q.) - by eakwarp - 30.04.2019, 10:47
Re: MySQL (F.A.Q.) - by Johhnyllll - 30.04.2019, 10:48
Re: MySQL (F.A.Q.) - by Stepashka - 30.04.2019, 12:04
Re: MySQL (F.A.Q.) - by Johhnyllll - 30.04.2019, 12:26
Re: MySQL (F.A.Q.) - by Stepashka - 30.04.2019, 12:30
Re: MySQL (F.A.Q.) - by bgAndroid - 06.08.2019, 02:12
Re: MySQL (F.A.Q.) - by Stepashka - 06.08.2019, 07:20
Re: MySQL (F.A.Q.) - by cm666 - 06.08.2019, 14:25
Re: MySQL (F.A.Q.) - by Stepashka - 06.08.2019, 20:28
Re: MySQL (F.A.Q.) - by gensek4 - 28.08.2019, 02:11
Re: MySQL (F.A.Q.) - by Stepashka - 28.08.2019, 06:46
Re: MySQL (F.A.Q.) - by gensek4 - 29.08.2019, 11:35
Re: MySQL (F.A.Q.) - by Stepashka - 29.08.2019, 12:03
Re: MySQL (F.A.Q.) - by gensek4 - 30.08.2019, 02:39
Re: MySQL (F.A.Q.) - by Stepashka - 30.08.2019, 06:50
Re: MySQL (F.A.Q.) - by gensek4 - 30.08.2019, 07:22

Forum Jump:


Users browsing this thread: 18 Guest(s)