powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реляционка тут бессильна?
25 сообщений из 169, страница 3 из 7
Реляционка тут бессильна?
    #39521070
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovtip78а зачем плодить "черновики"?

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

"упадёт" она, только если вы её удалите
так вот не удаляйте.
и не придётся лепить кучу ненужных таблиц
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521073
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registererstip78любители хранить корзины отдельно, какую ценность для вас несёт первозданная корзина ДО кнопки "оформить заказ" ?
после звонка менеджера выяснится, что чего-то нет, что-то забыли доложить, что-то надо заменить
важны не эти изменения, а только ОПЛАЧЕННЫЙ ЗАКАЗ = транзакция: -товар +деньги
а зачем плодить "черновики"?
Бугога)) А по какому признаку вы собираетесь агрегировать товары в таблице? По времени добавления в корзину?)))
по id, например
:рукалицо:
нормальную форму бегом гуглить, пока ваше понимание "таблиц" и "реляционности" не придёт в норму
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521085
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78Dimitry Sibiryakovпропущено...

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

"упадёт" она, только если вы её удалите
так вот не удаляйте.
и не придётся лепить кучу ненужных таблиц

Вы вообще в курсе о существовании такого понятия как нормальная форма и зачем это?))
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521086
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78registerersпропущено...

Бугога)) А по какому признаку вы собираетесь агрегировать товары в таблице? По времени добавления в корзину?)))
по id, например
:рукалицо:
нормальную форму бегом гуглить, пока ваше понимание "таблиц" и "реляционности" не придёт в норму
Вы же как раз и предлагаете денормализовать)))
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521092
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинregisterersНо тогда возникает вопрос - как обеспечить константность значений полей SubA.Type, SubB.Type,

Ограничениями (check), я же сказал. У разных СУБД механизм отличается, но не сильно.
Интересно, а какие техники реализации существуют? Например, мне приходит в голову только определение в subtype-таблице поля с ненулевым дефолтным значением TypeId и убрать update/insert из грантов (конечно, если это PostgreSQL). Но это тоже пахнет костылём, ибо дефолтное значение - это часть DDL, т.е. метаинформация, а конкретное значение id supertype-таблицы - это данные.
Так что не так всё просто, как вы рисуете...
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521121
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersВы вообще в курсе о существовании такого понятия как нормальная форма и зачем это?))
в профили заглядывайте иногда
вам бы тут не выёживаться надо, а всасывать каждую букву, коли за помощью пришли со своими дикими идеями
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521143
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78registerersВы вообще в курсе о существовании такого понятия как нормальная форма и зачем это?))
в профили заглядывайте иногда
вам бы тут не выёживаться надо, а всасывать каждую букву, коли за помощью пришли со своими дикими идеями
Вот только давайте без обид и без снобизма, только по сути)) Эмоции часто вредят продуктивной дискуссии. А форумы, кстати, существуют не только для помощи, но и для обмена идеями. Бинго! Просто хочется разобраться в теоретических вопросах, думаю, не только одному мне это интересно. А теперь по сути объясните, почему то, что вы предлагаете не является денормализацией?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521333
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registererstip78пропущено...

в профили заглядывайте иногда
вам бы тут не выёживаться надо, а всасывать каждую букву, коли за помощью пришли со своими дикими идеями
Вот только давайте без обид и без снобизма, только по сути)) Эмоции часто вредят продуктивной дискуссии. А форумы, кстати, существуют не только для помощи, но и для обмена идеями. Бинго! Просто хочется разобраться в теоретических вопросах, думаю, не только одному мне это интересно. А теперь по сути объясните, почему то, что вы предлагаете не является денормализацией?

обожемойкакой3.14здец отличнаямотивирующаяречь!
1. МЫ тут не ради ваших "квадратных велосипедов идей". Зачем нам деградировать?? В этой теме ВАМ вправляют мозги, а вы наполняетесь счастьем.
Просто напомню, что мы находимся в теме с названием, которое вы придумали на полном серьёзе - " РЕЛЯЦИОНКА ТУТ БЕССИЛЬНА? ", где под " ТУТ " подразумевается довольно банальная схема EAV, а конкретно, вы не осилили и извратили элементарное хранение товаров со множеством атрибутов (которые по сути являются свойствами).
Т.е. вы своей задачкой для 5 класса просто обоссали всю реляционную алгебру и триллионы человеко-часов довольно неплохих математиков заявив, что они её не тянут.

2. а теперь по сути:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
/* ЗАКАЗЫ
история заказов через статусы
статусы/товары берутся по order_id в order_statuses/_products
клиенты/менеджеры/курьеры и прочие люди - ВСЕ в таблице users
*/

CREATE TABLE orders(
id bigserial PRIMARY KEY,       -- ID заказа, по которому привязываются товары/статусы/склад/курьер/итд
uid int,                        -- чей заказ
address_id int default 0,       -- ID из addresses (у клиента их может быть несколько)
delivery_id int default 0,      -- ID из delivery_methods
payment_id int default 0,       -- ID из payment_methods
comment text default '',        -- произвольная запись от клиента
summ int default 0,             -- финальная общая сумма заказа фиксируется (при оплате) навсегда, потому что через неделю у товаров будут уже другие цены
added timestamptz DEFAULT NOW()
);

CREATE INDEX ON orders (uid);
CREATE INDEX ON orders USING brin(added);



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
-- статусы заказа

CREATE TABLE order_statuses(
order_id int,                   -- ID заказа
uid int,                        -- чей статус (например, "собран" = uid складовщика, а "передан курьеру/доставлен" = uid курьера)
status smallint default 1,      -- статус заказа: 1 корзина; 2 оформлен; 4 подтверждён; 8 отказ; 16 собран; 32 передан курьеру; 64 доставлен; 128 оплачен;
added timestamptz default now() -- когда какой статус случился
);

CREATE INDEX ON order_statuses (order_id);
CREATE INDEX ON order_statuses (status);



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
-- товары в заказе

CREATE TABLE order_products(
order_id int PRIMARY KEY,       -- ID заказа
pid int                         -- ID товара
);

CREATE INDEX ON order_products (order_id);
CREATE INDEX ON order_products (pid);
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521369
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip781. МЫ тут не ради ваших "квадратных велосипедов идей". Зачем нам деградировать?? В этой теме ВАМ вправляют мозги, а вы наполняетесь счастьем.
Да не бойтесь вы, мышление ещё никогда никого не привело к деградации)) Вот и вправьте мне мозги, ответив на мой вопрос топика, а не уходя от него ;-)

tip78Просто напомню, что мы находимся в теме с названием, которое вы придумали на полном серьёзе - " РЕЛЯЦИОНКА ТУТ БЕССИЛЬНА? ", где под " ТУТ " подразумевается довольно банальная схема EAV,
Поэтому я и говорю, читайте внимательно первый пост и последующие. Под " ТУТ " подразумевалась конкретная задача, которая часто встречается, а EAV - всего лишь один из способов решения задачи. Собственно, целью сабжа было прояснить, какие вообще подходы к решению задачи существуют и насколько они эффективны. Не зря же придумали документно-ориентированные СУБД. Понимаю, что тема холиварная, но давайте обмениваться аргументами, а не эмоциями!

tip78 а конкретно, вы не осилили и извратили элементарное хранение товаров со множеством атрибутов (которые по сути являются свойствами).
Т.е. вы своей задачкой для 5 класса просто обоссали всю реляционную алгебру и триллионы человеко-часов довольно неплохих математиков заявив, что они её не тянут.
Это не я извратил, это существующий паттерн Flat table костыльный, о чём я и писал (создаётся впечатление, что вы вообще не читали предыдущие посты). И да, есть красивая реляционная теория, а есть суровая практика и я не один раз встречал в ней решения на основе EAV, которые ложили апп на овер 100к айтемов. Поэтому рефакторили такие системы, в том числе применяя денормализацию. Кстати, Magento, тоже отказалась в свое время от EAV.

tip782. а теперь по сути:
Вот так бы и сразу)) Спасибо за ваш SQL-код, вижу, что вы старались. Но это почти оффтоп. Корзина в поставленной задаче не главное, логика её работы - отдельная тема. То кому-то что-то не понравилось и понеслось... Я вообще пример с магазином придумал потому что он многим знаком. Суть же задачи, которую я ставил состоит в том, возможно ли в денормализованных архитектурах БД выдержать условия однозначности и непротиворечивости реляционных связей? В случае Flat table (type-supertype), это невозможно, что было показано выше. Представьте, у вас есть родительская (supertype) таблица и две дочерние (subtype). Для определения того, с какой из дочерних таблиц заджойнить родительскую, нужно сначала проверить в ней значение поля Type. Вот лучше этот один запрос напишите, тогда и поговорим о реляционной алгебре ;-)
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521383
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersНе зря же придумали документно-ориентированные СУБД.

Каждый день что-то придумывают.

И каждый день некоторые люди узнают, что земля оказывается круглая, но предлагают обсудить также идеи насчёт того, что она вообще-то может быть плоской или квадратной.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521395
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersСуть же задачи, которую я ставил состоит в том, возможно ли в денормализованных архитектурах БД выдержать условия однозначности и непротиворечивости реляционных связей? В случае Flat table (type-supertype), это невозможно, что было показано выше.

Правда? И в каком посте?
registerers Представьте, у вас есть родительская (supertype) таблица и две дочерние (subtype). Для определения того, с какой из дочерних таблиц заджойнить родительскую, нужно сначала проверить в ней значение поля Type.
Нет, не нужно.
Ну почитайте что-нибудь про subtype-supertype, в самом деле - как с ним работают, etc. Вы постоянно выдвигаете какие-то нелепые тезисы про него - то дублирования записей нельзя избежать, теперь вот перед join-ом что-то проверять надо...
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521412
registerers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинВы постоянно выдвигаете какие-то нелепые тезисы про него - то дублирования записей нельзя избежать, теперь вот перед join-ом что-то проверять надо...
Почему же они "нелепые"? Вы так и не привели пример, как можно ограничить возможность ссылаться другим subtype-таблицам на одну и ту же запись supertype-таблицы.

Окей, если мой вопрос по джойнам "нелеп", как вы выведете список товаров всех типов?)))
Код: sql
1.
2.
SELECT * FROM supertype
JOIN ??? ON ???.id = supertype.id
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521455
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttEnnor TiegaelНу и наконец, если пользователь захочет отправить содержимое корзины по нескольким адресам - как у Амазона, "Deliver to multiple addresses" - придется проделывать кучу дополнительных телодвижений.
Если корзина и заказ — разные таблицы и сущности, то сделать подобное не проблема Ничто не проблема. Вопрос, зачем делать, если сейчас делать не нужно, а потом возможно придется переделывать?

registerers,

Я кажется понял, в чем нестыковка. Вы называете "корзиной" элементы заказа. Не советую так делать, имхо лучше сделать отдельную таблицу OrderItems, и в нее копировать записи из корзины (с одновременным удалением их из оной). Это разные сущности, с весьма разнящимися атрибутами.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521511
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelНичто не проблема. Вопрос, зачем делать, если сейчас делать не нужно, а потом возможно придется переделывать?

Ну что поделаешь, не каждому дано думать на пару шагов вперёд. Переделывать всегда сложнее, чем заложить изначально. Надо уменьшать эти издержки по возможности.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521539
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
registerersКот МатроскинВы постоянно выдвигаете какие-то нелепые тезисы про него - то дублирования записей нельзя избежать, теперь вот перед join-ом что-то проверять надо...
Почему же они "нелепые"? Вы так и не привели пример, как можно ограничить возможность ссылаться другим subtype-таблицам на одну и ту же запись supertype-таблицы.

Кот МатроскинТоже мне, бином Ньютона - включаете поле Type в ключ, накладываете на него соответствующие ограничения в каждой из subtype-таблиц.
registerersОкей, если мой вопрос по джойнам "нелеп", как вы выведете список товаров всех типов?)))
Код: sql
1.
2.
SELECT * FROM supertype
JOIN ??? ON ???.id = supertype.id



Наводящее уточнение - у разных типов существенно разные поля (иначе паттерн был бы не нужен). Вы хотите видеть в списке все возможные поля всех типов для каждого товара? Или только общие для всех типов поля?
После ответа на это уточнение запрос имхо становится вполне очевидным
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521542
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttEnnor TiegaelНичто не проблема. Вопрос, зачем делать, если сейчас делать не нужно, а потом возможно придется переделывать?

Ну что поделаешь, не каждому дано думать на пару шагов вперёд. Переделывать всегда сложнее, чем заложить изначально. Надо уменьшать эти издержки по возможности.
Таки расскажите, какой конкретно кейс Вы отдельной таблицей под корзину "закладываете изначально", а в случае единой таблицы "придется переделывать"?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521558
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинТаки расскажите, какой конкретно кейс Вы отдельной таблицей под корзину "закладываете изначально", а в случае единой таблицы "придется переделывать"?

Мне ещё раз повторить, что корзина это то, с чем работает пользователь, а заказ это то с чем работают сотрудники магазина?

В чём проблема-то, думать головой используя банальную логику, принципы разработки, и закладывать это изначально, а не потом когда-нибудь?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521564
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,

Вы, наверное, меня имели в виду.

Моя логика в том, что корзина - сущность временного назначения, и данные там лежат только до тех пор, пока не сформирован(ы) заказ(ы). Семантически она не тождественна позициям заказа - там могут быть какие-то столбцы, неактуальные для позиций заказа, и не быть многих, которые актуальны. Например, все что связано с выбором склада, если таковых больше одного. Или такой вариант: юзер берет 5 экземпляров какой-то позиции, 3 берутся с одного склада, а оставшиеся 2 - с другого. Зачем это в корзине? А когда юзер передумает и уменьшит количество, опять обтанцовывать кактус кругом?

Почему мне не нравится идея одной таблицы вместо двух: если / когда пользователь начнет разносить содержимое корзины на несколько заказов, придется делать дополнительные телодвижения в виде апдейта поля OrderId, причем нелинейного - какая-то часть позиций остается в дефолтном заказе, остальные разъезжаются по новым. Учитывая, что я еще ни разу не видел интернет-магазина, где разбивка по заказам сохранялась бы до оплаты, не думаю, что это сильно востребовано рынком. Конечно, если средний заказ состоит из сотен позиций, возможно это и имеет смысл, но сколько таких магазинов?

Ну и я до сих пор не увидел рациональной аргументации, зачем пользователю иметь OrderId на стадии наполнения корзины. Вы же понимаете, что столбцы на страницах занимают место, и каждое обращение к корзине будет этот столбец с диска поднимать, даже если он не включен в селект. Ну и размер таблицы в этом случае будет совсем не копеечный.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521571
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,

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

Далее, разработчики могут предложить функцию мульти-корзины. Самое банальное: отложенные товары в отдельной корзине. Потом можно приделать несколько корзин, чтобы пользователь мог разделить покупки, куплю сейчас, куплю через неделю, куплю когда-нибудь, это себе, это жене.. и т.д. Корзина это чисто пользовательская концепция. Что здесь непонятного?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521575
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelНу и я до сих пор не увидел рациональной аргументации, зачем пользователю иметь OrderId на стадии наполнения корзины. Вы же понимаете, что столбцы на страницах занимают место, и каждое обращение к корзине будет этот столбец с диска поднимать, даже если он не включен в селект. Ну и размер таблицы в этом случае будет совсем не копеечный.

Дело даже не в этом. Само наличие заказа подразумевает начало некоего workflow, появление нового заказа в системе это событие. А работа с корзиной это совершенно отдельная история. С корзиной могут быть связаны совершенно другие процессы.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521579
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКот МатроскинТаки расскажите, какой конкретно кейс Вы отдельной таблицей под корзину "закладываете изначально", а в случае единой таблицы "придется переделывать"?

Мне ещё раз повторить, что корзина это то, с чем работает пользователь, а заказ это то с чем работают сотрудники магазина?

Ну запретить повторить я Вам не могу - свободная страна, все такое :)
Но имхо желательно, чтобы аргументы были как-то связаны с защищаемой позицией.
Вы начали говорить про "переделывать всегда сложнее". Так что и зачем нужно переделывать ? Вы в рамках одной таблицы никак, просто совсем никак не можете реализовать "корзина это то, с чем работает пользователь, а заказ это то с чем работают сотрудники магазина"?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521595
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelКот Матроскин,

Вы, наверное, меня имели в виду.

Нет, не совсем :)
Вы не произносите трескучих фраз "поддерживать дорого", "надо думать изначально" и т.д.

Ennor TiegaelПочему мне не нравится идея одной таблицы вместо двух: если / когда пользователь начнет разносить содержимое корзины на несколько заказов, придется делать дополнительные телодвижения в виде апдейта поля OrderId, причем нелинейного - какая-то часть позиций остается в дефолтном заказе, остальные разъезжаются по новым.

В смысле - какие дополнительные телодвижения? Что в том что в другом случае у Вас есть некое множество товаров, части этого множества Вам надо разложить на N заказов. Где именно тут дополнительные телодвижения?
Наоборот, как я уже говорил, у Вас в системе все равно уже есть API "переложить часть заказа в новый заказ", и Вам не надо делать новую процедуру "переложить часть корзины в новый заказ"
Ennor Tiegael
Ну и я до сих пор не увидел рациональной аргументации, зачем пользователю иметь OrderId на стадии наполнения корзины. Вы же понимаете, что столбцы на страницах занимают место, и каждое обращение к корзине будет этот столбец с диска поднимать, даже если он не включен в селект. Ну и размер таблицы в этом случае будет совсем не копеечный.
У Вас будет CustomerID вместо этого - который точно так же занимает место, поднимается с диска и т.п.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521600
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДалее, разработчики могут предложить функцию мульти-корзины. Самое банальное: отложенные товары в отдельной корзине. Потом можно приделать несколько корзин, чтобы пользователь мог разделить покупки, куплю сейчас, куплю через неделю, куплю когда-нибудь, это себе, это жене.. и т.д. Корзина это чисто пользовательская концепция. Что здесь непонятного?
Что именно из перечисленного у Вас не получается в случае единой таблицы?
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521614
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинВы начали говорить про "переделывать всегда сложнее". Так что и зачем нужно переделывать ? Вы в рамках одной таблицы никак, просто совсем никак не можете реализовать "корзина это то, с чем работает пользователь, а заказ это то с чем работают сотрудники магазина"?

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

Корзина и заказ — разные вещи по сути и по логике. Адекватный разработчик в БД для разных вещей смоделирует отдельные таблицы. С чём вы пытаетесь спорить я до сих пор не пойму.
...
Рейтинг: 0 / 0
Реляционка тут бессильна?
    #39521616
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинЧто именно из перечисленного у Вас не получается в случае единой таблицы?

Зачем вы приплели сюда понятие «получится»? Удобно и комфортно работать с этим, если для разных по смыслу и функциональности понятий будут выделены отдельные сущности и таблицы. Не удобно и не комфортно, трудносопровождаемо это будет сделать на одной, но если человек не может пользоваться мозгом, то ему нечего делать в разработке, пусть идёт лопатой машет.
...
Рейтинг: 0 / 0
25 сообщений из 169, страница 3 из 7
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реляционка тут бессильна?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]