|
|
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Добрый день, хотел бы описать свою задачу и получить помощь в ее решении. 1. Вариант Требуется сделать двойные идентификаторы в mysql таблице, один сквозной по таблице, второй для каждого пользователя свой, для того, чтобы у каждого пользователя был свой счетчик идентификаторов, например после регистрации на сервисе и после добавления товара, его товар получил бы ID = 1, а внутри система это скажем бы был уже сотый товар с ID = 100. Как правильно реализовать? 2. Вариант Использование символьного составного идентификатора, например id организации и id товара в одном идентификаторе, например Org10Tovar100, где Org10 идентификатор организации, а вторая часть Tovar100 для каждого нового пользователя начиная с 1. Как сделать эксперты? Возможно в связке с PHP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 02:52:48 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
dima19007, 1. составные идентификаторы в одном поле -- зло. 2. Сделайте отдельные поля: ид инт ПК, автоинкремент юзер_ид инт ФК на таблицу юзеров юзер_посишн инт -- отдельный счетчик для конкретного юзера 3. в зависимости от конкурентности системы, поле позиции можно считать как селект МАХ(посишн) + 1 .... или более конкурентно-устойчивыми способами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 05:01:31 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
dima19007, У вас явная неполнота условий. В первой части вы хотите единый идент для всех товаров и "локальный для ПОЛЬЗОВАТЕЛЯ", а во второй у вас также версия единого идента в составном виде, но УЖЕ по организациям, и локально опять же для ПОЛЬЗОВАТЕЛЯ. Отсюда, мой ХШ говорит, что у вас товары, всеж-таки по организациям, но вы "почему-то" их связываете 1-1 с пользователями... то есть, если "хозяин" фирмы уволился или перешел к конкуренту, все товары фирмы потянутся за ним, так? Я к чему: уточните сколько сущностей по которым нужна локальная идентификация товаров 1 или 2? Я делал так: товар привязан к фирме, через форейнключ на фирму, владелицу товара. А идент глобальный - это ПК таблицы товаров. Пользователи - это отдельная ссущность, которая также может иметь ссыль на фирму, в которой оно работает... а может и НЕ иметь (ничей юзверь). В профиле пользователя есть признак, типа "товаровед", который разрешает оному редактировать товары фирмы. Это чтобы не каждый продаван фирмы, а только допущенный мог редактировать товары... но это тоже - свойство юзверя с привязкой к фирме. Вот, через общую привязку к фирме, её товары и показываются/редактируются пользователем. Зачем ему нумерация? Но, если она нужна - можете из каждого общего идента товаров при показе вычитать первый (наименьший), да хоть на клиенте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 07:27:55 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Сорь за оффтоп, но это пять! Arhat109Пользователи - это отдельная ссущность, которая также может иметь ссыль на фирму, в которой оно работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 10:34:13 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Arhat109Пользователи - это отдельная ссущность, которая также может иметь ссыль на фирму, в которой оно работает... а может и НЕ иметь (ничей юзверь).А может иметь и несколько ссылей - торговый агент или совместитель, к примеру... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 10:40:30 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Akina, Можно и так, но тогда надо делать отдельную табличку связи. На товарных сайтах такая детализация как правило не нужна. Там нужен юзверь, который может редактировать товары фирмы. А хде он ишо пашет - фиолетово. Часто сайты предлагают разный интерфейс продажникам и снабженцам... вот для ентого случаю и надо. Вдруг у фирмы несколько юзверей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 11:59:37 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Arhat109На товарных сайтах такая детализация как правило не нужна. Там нужен юзверь, который может редактировать товары фирмы. Обычно аккаунт привязан к юзеру, а не к фирме. Кстати, без этого разграничение прав не организовать. А вот является там юзер самостоятельной единицей безопасности, или он входит в пул единиц безопасности фирмы - тут может быть и так, и эдак. Второе, конечно, проще, зато первое удобнее конечному пользователю. Например, в мелких Инет-магазинах обычно вторая схема, а в крупных как правило первая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 12:29:26 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
javajdbc, у меня была такая же мысль, но смущает использование max(id+1) и как это поведет себя при большом количестве пользователей. Сущности две: 1. Организация ID (автоинкремент) Name 2. Товар Внутренний Id (автоинкремент) Локальный Id (для каждой организации с ID = 1) ID организации И еще вопрос: как безболезненно перейти к применению локальных идентификаторов в каждой организации, если сейчас используется сквозная P.S. Остальным комментаторам, не усложняйте пожалуйста исходную задачу, разграничение прав и пользователи не нужны, нужен принцип хранения и оперирования двумя сущностями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 12:38:21 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Мое видение: Перед добавлением товара, вызывается какая-либо функция, которая устанавливает в качестве параметра текущую организацию и затем производятся обычные insert into tovar name = 'test'; update tovar set name = 'test2' where id = локальный id; то есть не заморачиваясь на сквозной идентификатор. Это самый удобный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 12:42:05 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
По второму варианту, очень хороший пример организации идентификаторов в системе у Salesforce нашел http://help.salesforce.com/apex/HTViewSolution?id=000004383&language=en_US но как реализовать что-то подобное не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 12:54:58 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Я правильно понимаю, что для каждого пользователя (ака фирма) свойства внутреннего счётчика должны полностью эмулировать автоинкремент? т.е. не должно быть никаких идиотских заморочек вроде повторного использования идентификатора после дуаления товара? Если так - то такой счётчик становится атрибутом пользователя, и должен храниться в таблице пользователей. А как организовать при этом его использование и пересчёт - дело уже десятое. Я бы пошёл по пути "никаких запросов" - т.е. заносить товары исключительно вызовом соотв. процедуры, которая и обеспечит необходимый пересчёт. А для верного - ещё создал бы соотв. уникальный индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 12:57:49 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
dima19007вопрос: как безболезненно перейти к применению локальных идентификаторов в каждой организации, если сейчас используется сквозная А это подробно рассмотрено в ФАКе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 12:59:58 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
PS. Если же стоИт задача ОТКАЗАТЬСЯ от сквозной нумерации - возможно, неполохим решением может быть партиционирование по фирме. Тогда в каждой партиции - свой ключ-автоинкремент, и никаких проблем. Их плохого - DDL при изменении списка фирм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 13:02:08 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Akina, Что есть сейчас: Проект с сквозными идентификаторами. То есть пользователь, который сейчас зарегистрируется в системе и добавит товар, увидит идентификатор товара 100500, а нужно ID = 1 Задача: Необходимо добавить локальные идентификаторы Оставив при этом сквозные идентификаторы, для оперирования в админке. Пользователю показывать локальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 13:18:07 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Тогда 15407482 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 13:25:09 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Akina, Извините но ваш комментарий не добавил мне ясности по вопросу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 13:35:43 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Что именно осталось непонятым? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 13:52:21 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Akina, Как организовать хранение в Mysql и как обрабатывать записи с учетом локальных идентификаторов. На примере запросов или возможно хранимой процедуры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 13:58:59 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
http://club.shelek.ru/viewart.php?id=317 то что нужно, но у меня тип Innodb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 14:16:10 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Ок. Чисто шаблонно (no syntax, без учёта мультидоступа, чисто идея). Имеется набор таблиц: Код: sql 1. 2. Соответственно good.id - это сквозная нумерация. Необходимо ввести нумерацию для клиентов. Процесс ведём при запрещённом изменении данных. Первая модификация - добавить в таблицу товаров поле для сквозной нумерации в разрезе клиента. Код: sql 1. Далее - выполнить нумерацию в группе с заполнением этого поля. FAQ: Нумерация строк и другие вопросы про использование переменных - этапы 1 и 2 преобразовать во VIEW, использовать в UPDATE. Затем - наложить требование уникальности в группе. Код: sql 1. Затем модифицировать таблицу юзеров. Код: sql 1. Заполнить её данными Код: sql 1. 2. 3. И последнее - создаём процедуру добавления товара Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 14:53:01 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Akina, Спасибо за подробный ответ. Насколько правильно использовать операцию max + 1? Можно ли ее как либо заменить, в mysql sequence не поддерживается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 15:00:57 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
dima19007Насколько правильно использовать операцию max + 1? При озвученных ограничениях - нормально. dima19007в mysql sequence не поддерживается? Ммм... вот даже не знаю, что бы тебе сейчас и сказать-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 15:14:29 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Akina, max + 1 не красивое решение... по sequence вопрос остается. и как заменить max + 1 тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 15:23:30 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Akina, Речь была не про это. С правами - это чисто для примеру разных пользователей от одной фирмы. Речь о том, что "локальный" идентификатор непонятно к чему: то ли товары фирмы надо нумеровать с нуля, то ли пользователя от этой фирмы ... а если их у фирмы 2шт, что тогда? у каждого пользователя своя нумерация али как? Насколько понимаю сейчас - у ТС-а не различается "пользователь" и "фирма". Но, опять же, остается непонятным характер локальной нумерации, вот к примеру: 1. Пронумеровали товары фирмы 1 .. 100. А потом товар 1 удалили. Как показывать? как 2 .. 100 или 1..99? А если удалили 53-й товар, что тогда? 2. Уникальность локального нумератора, она какова? И это не только к вопросу "а можно ли записать новый товар под номером удаленного"... а может это ... артикул? Я к тому, что без дополнительных подробностей - фиг чё посоветуешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 22:35:43 |
|
||
|
Идентификаторы в Mysql
|
|||
|---|---|---|---|
|
#18+
Arhat109 , 15407269 отвечает на эти вопросы. Эмуляция автоинкремента. Удалённые - не заполняются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 22:47:37 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38524155&tid=1835405]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 309ms |

| 0 / 0 |
