powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Идентификаторы в Mysql
25 сообщений из 26, страница 1 из 2
Идентификаторы в Mysql
    #38523805
dima19007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, хотел бы описать свою задачу и получить помощь в ее решении.

1. Вариант
Требуется сделать двойные идентификаторы в mysql таблице, один сквозной по таблице, второй для каждого пользователя свой, для того, чтобы у каждого пользователя был свой счетчик идентификаторов, например после регистрации на сервисе и после добавления товара, его товар получил бы ID = 1, а внутри система это скажем бы был уже сотый товар с ID = 100. Как правильно реализовать?

2. Вариант
Использование символьного составного идентификатора, например id организации и id товара в одном идентификаторе, например Org10Tovar100, где Org10 идентификатор организации, а вторая часть Tovar100 для каждого нового пользователя начиная с 1.

Как сделать эксперты? Возможно в связке с PHP
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38523815
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima19007,

1. составные идентификаторы в одном поле -- зло.

2. Сделайте отдельные поля:

ид инт ПК, автоинкремент
юзер_ид инт ФК на таблицу юзеров
юзер_посишн инт -- отдельный счетчик для конкретного юзера

3. в зависимости от конкурентности системы,
поле позиции можно считать как
селект МАХ(посишн) + 1 ....
или более конкурентно-устойчивыми способами.
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38523836
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima19007,

У вас явная неполнота условий. В первой части вы хотите единый идент для всех товаров и "локальный для ПОЛЬЗОВАТЕЛЯ", а во второй у вас также версия единого идента в составном виде, но УЖЕ по организациям, и локально опять же для ПОЛЬЗОВАТЕЛЯ.

Отсюда, мой ХШ говорит, что у вас товары, всеж-таки по организациям, но вы "почему-то" их связываете 1-1 с пользователями... то есть, если "хозяин" фирмы уволился или перешел к конкуренту, все товары фирмы потянутся за ним, так?

Я к чему: уточните сколько сущностей по которым нужна локальная идентификация товаров 1 или 2?

Я делал так: товар привязан к фирме, через форейнключ на фирму, владелицу товара. А идент глобальный - это ПК таблицы товаров. Пользователи - это отдельная ссущность, которая также может иметь ссыль на фирму, в которой оно работает... а может и НЕ иметь (ничей юзверь). В профиле пользователя есть признак, типа "товаровед", который разрешает оному редактировать товары фирмы. Это чтобы не каждый продаван фирмы, а только допущенный мог редактировать товары... но это тоже - свойство юзверя с привязкой к фирме.

Вот, через общую привязку к фирме, её товары и показываются/редактируются пользователем. Зачем ему нумерация? Но, если она нужна - можете из каждого общего идента товаров при показе вычитать первый (наименьший), да хоть на клиенте...
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38523930
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорь за оффтоп, но это пять!
Arhat109Пользователи - это отдельная ссущность, которая также может иметь ссыль на фирму, в которой оно работает...
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38523936
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Пользователи - это отдельная ссущность, которая также может иметь ссыль на фирму, в которой оно работает... а может и НЕ иметь (ничей юзверь).А может иметь и несколько ссылей - торговый агент или совместитель, к примеру...
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524069
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Можно и так, но тогда надо делать отдельную табличку связи. На товарных сайтах такая детализация как правило не нужна. Там нужен юзверь, который может редактировать товары фирмы. А хде он ишо пашет - фиолетово. Часто сайты предлагают разный интерфейс продажникам и снабженцам... вот для ентого случаю и надо. Вдруг у фирмы несколько юзверей...
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524132
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109На товарных сайтах такая детализация как правило не нужна. Там нужен юзверь, который может редактировать товары фирмы.
Обычно аккаунт привязан к юзеру, а не к фирме. Кстати, без этого разграничение прав не организовать.
А вот является там юзер самостоятельной единицей безопасности, или он входит в пул единиц безопасности фирмы - тут может быть и так, и эдак. Второе, конечно, проще, зато первое удобнее конечному пользователю.
Например, в мелких Инет-магазинах обычно вторая схема, а в крупных как правило первая.
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524146
dima19007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

у меня была такая же мысль, но смущает использование max(id+1) и как это поведет себя при большом количестве пользователей.

Сущности две:

1. Организация
ID (автоинкремент)
Name

2. Товар
Внутренний Id (автоинкремент)
Локальный Id (для каждой организации с ID = 1)
ID организации

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

P.S. Остальным комментаторам, не усложняйте пожалуйста исходную задачу, разграничение прав и пользователи не нужны, нужен принцип хранения и оперирования двумя сущностями
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524155
dima19007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мое видение:
Перед добавлением товара, вызывается какая-либо функция, которая устанавливает в качестве параметра текущую организацию и затем производятся обычные
insert into tovar name = 'test';
update tovar set name = 'test2' where id = локальный id;

то есть не заморачиваясь на сквозной идентификатор. Это самый удобный вариант.
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524187
dima19007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По второму варианту, очень хороший пример организации идентификаторов в системе у Salesforce нашел

http://help.salesforce.com/apex/HTViewSolution?id=000004383&language=en_US

но как реализовать что-то подобное не знаю
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524199
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что для каждого пользователя (ака фирма) свойства внутреннего счётчика должны полностью эмулировать автоинкремент? т.е. не должно быть никаких идиотских заморочек вроде повторного использования идентификатора после дуаления товара?

Если так - то такой счётчик становится атрибутом пользователя, и должен храниться в таблице пользователей. А как организовать при этом его использование и пересчёт - дело уже десятое. Я бы пошёл по пути "никаких запросов" - т.е. заносить товары исключительно вызовом соотв. процедуры, которая и обеспечит необходимый пересчёт. А для верного - ещё создал бы соотв. уникальный индекс.
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524206
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima19007вопрос: как безболезненно перейти к применению локальных идентификаторов в каждой организации, если сейчас используется сквозная
А это подробно рассмотрено в ФАКе...
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524209
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Если же стоИт задача ОТКАЗАТЬСЯ от сквозной нумерации - возможно, неполохим решением может быть партиционирование по фирме. Тогда в каждой партиции - свой ключ-автоинкремент, и никаких проблем. Их плохого - DDL при изменении списка фирм.
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524235
dima19007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Что есть сейчас: Проект с сквозными идентификаторами.

То есть пользователь, который сейчас зарегистрируется в системе и добавит товар, увидит идентификатор товара 100500, а нужно ID = 1

Задача: Необходимо добавить локальные идентификаторы

Оставив при этом сквозные идентификаторы, для оперирования в админке.
Пользователю показывать локальные.
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524249
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда 15407482
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524271
dima19007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Извините но ваш комментарий не добавил мне ясности по вопросу...
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524295
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что именно осталось непонятым?
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524316
dima19007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Как организовать хранение в Mysql и как обрабатывать записи с учетом локальных идентификаторов. На примере запросов или возможно хранимой процедуры
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524348
dima19007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://club.shelek.ru/viewart.php?id=317
то что нужно, но у меня тип Innodb
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524409
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок. Чисто шаблонно (no syntax, без учёта мультидоступа, чисто идея).

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

Код: sql
1.
2.
create table client (id int, name text, primary key(id));
create table good (id int, id_client int, name text, primary key(id), key(id_client) fk client(id));


Соответственно good.id - это сквозная нумерация. Необходимо ввести нумерацию для клиентов.

Процесс ведём при запрещённом изменении данных.

Первая модификация - добавить в таблицу товаров поле для сквозной нумерации в разрезе клиента.
Код: sql
1.
alter table good add column id_for_client int



Далее - выполнить нумерацию в группе с заполнением этого поля.
FAQ: Нумерация строк и другие вопросы про использование переменных - этапы 1 и 2 преобразовать во VIEW, использовать в UPDATE.

Затем - наложить требование уникальности в группе.
Код: sql
1.
alter table good add unique key (id_client, id_for_client)



Затем модифицировать таблицу юзеров.
Код: sql
1.
alter table client add column max_good_id int



Заполнить её данными
Код: sql
1.
2.
3.
update client, (select id_client, max(id_for_client) max_good_id from good group by id_client) maxs
set client.max_good_id = maxs.max_good_id
where client.id = maxs.id_client



И последнее - создаём процедуру добавления товара
Код: sql
1.
2.
3.
4.
5.
6.
create procedure add_good(idclient, good_name)
begin
select max_good_id + 1 into @maxs from client where id_client=idclient
insert into good(id_client, name, id_for_client) values (idclient, good_name, @maxs)
update client set  max_good_id = @maxs where  id_client=idclient
end
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524431
dima19007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Спасибо за подробный ответ.
Насколько правильно использовать операцию max + 1?
Можно ли ее как либо заменить, в mysql sequence не поддерживается?
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524464
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima19007Насколько правильно использовать операцию max + 1?
При озвученных ограничениях - нормально.
dima19007в mysql sequence не поддерживается?
Ммм... вот даже не знаю, что бы тебе сейчас и сказать-то...
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38524491
dima19007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

max + 1 не красивое решение...
по sequence вопрос остается.
и как заменить max + 1 тоже
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38525058
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Речь была не про это. С правами - это чисто для примеру разных пользователей от одной фирмы.

Речь о том, что "локальный" идентификатор непонятно к чему: то ли товары фирмы надо нумеровать с нуля, то ли пользователя от этой фирмы ... а если их у фирмы 2шт, что тогда? у каждого пользователя своя нумерация али как?

Насколько понимаю сейчас - у ТС-а не различается "пользователь" и "фирма". Но, опять же, остается непонятным характер локальной нумерации, вот к примеру:

1. Пронумеровали товары фирмы 1 .. 100. А потом товар 1 удалили. Как показывать? как 2 .. 100 или 1..99? А если удалили 53-й товар, что тогда?

2. Уникальность локального нумератора, она какова? И это не только к вопросу "а можно ли записать новый товар под номером удаленного"... а может это ... артикул?

Я к тому, что без дополнительных подробностей - фиг чё посоветуешь.
...
Рейтинг: 0 / 0
Идентификаторы в Mysql
    #38525062
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109 , 15407269 отвечает на эти вопросы. Эмуляция автоинкремента. Удалённые - не заполняются.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Идентификаторы в Mysql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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