powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Где у таблицы ID?
25 сообщений из 71, страница 1 из 3
Где у таблицы ID?
    #38323575
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача вроде бы очень простая. Есть некоторое количество таблиц каждая со своей структурой среди которых таблица с именем, например image и полями для краткости изложения: id int auto_increment, filename varchar(255). Задача снабдить ряд таблиц ссылкой на изображение решается тривиально через добавление поля image_id. Сделали запрос - получили по указателю имя файла.

Но как-то все не сшивается если захотеть получать изображения. Сначала все тоже вроде просто. Выкидываем из таблиц поле image_id, заводим таблицу image_list куда оно и переезжает в паре с указателем на родителя: (int id auto_increment, int parent_id, int image_id). Теперь можно связать с любой таблицей любое количество изображений.

Но проблема в том, что parent_id в БД состоящей из более чем 1 таблицы не уникален. Дубовые решения как то 1) специфически размножать таблицу image_list для каждой нуждающейся в изображениях таблицы; 2) завести некий глобальный ID типа UUID; 3) завести процедуру генерации глобального ID - грозят геморроем в будущем.

Легко приходит на ум программистское решение передать в запрос имя таблицы, типа добавить this . Но тогда придется либо сохранять в каждой записи имя родительской таблицы, либо заводить еще таблицу с парочкой ID - имя таблицы. В information_schema я ничего подходящего в таблице TABLES не нашел.

Может быть не там искал или вообще все не так делается?
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323579
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerТеперь можно связать с любой таблицей любое количество изображений.Я не понял, разве вариант с image_id в каждой таблице не позволяет "связать с любой таблицей любое количество изображений"? Или имелось в виду "связать с каждой записью любое количество изображений"?
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323580
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,

:) опишите задачу строже: "имеем это" (с приведением DDL), "хотим это" (с приведением образца результата), "пробуем так - получаем не то что хотелось" (с указанием чего конкретно не то - скорость получения, содержание и т.д.)

... потому как первый абзац содержит вполне вменяемое описание работающего варианта... а вот чего хотелось дальше - нестируктурированный поток мысли. По-просту, непонятна.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323581
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Начните прямо с первого предложения второго абзаца: что значит "захотеть получать изображения" ? В первом абзаце - это процесс вообще-то и описан, ежели вчё. Нет? А по полученному имени файла - прочитать файл не получается или как? :)
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323583
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109, мой ХШ подозревает, что ТСу хочется M:M между записями таблиц и файлами. Вот он и думает:
-то ли для каждой таблицы заводить связку %tablename%2images
-то ли сделать одну общую таблицу связи...
--и либо делать в ней некий указатель на исходную таблицу
--либо вообще перейти на глобальное использование гуидов
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323584
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При установлении связи сверху-вниз можно получить ровно 1 штуку. При установлении снизу-вверх - любое количество штук.

Я понимаю что ID таблицы в сущности ее имя. Но как-то неправильно хранить кучу юникодовых байтов в каждой записи моста отчего и пришла такая идея заменить эту кучу четырьмя int unsigned.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323587
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В парадигме программирования эта задача решается в один счет введением смещения адреса. Однако творцы SQL заповедали никаких адресов и смещений не юзать. Отсюда подозрение что задача изначально сформулирована неправильно коли требует смещения в форме имени таблицы к указателю.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323589
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerПри установлении связи сверху-вниз можно получить ровно 1 штуку. При установлении снизу-вверх - любое количество штук."сверху-вниз" - это, очевидно, "поле image_id в таблице". Что же такое "снизу-вверх"? С одной стороны, по аналогии это поле "table_id" в таблице images. С другой стороны, такой вариант явно не позволит установит "любое количество связей". Собственно, только одну он и сможет установить. Причём весьма специфическую
Выражайтесь яснее, пожалуйста.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323591
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirЯ не понял, разве вариант с image_id в каждой таблице не позволяет "связать с любой таблицей любое количество изображений"? Или имелось в виду "связать с каждой записью любое количество изображений"?

Не позволяет. Количество связанных с таблицей изображений будет в точности равно количеству записей в ней, а не любому количеству, даже если там вообще ни одного изображения не связано (ну, то есть image_id is NULL). Следовательно формулировка связать с каждой записью любое количество изображений - тавтология.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323594
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

эх, замутнел ваш ХШ... а давайте погадаем (у нас тут погода стремная):

ИМХО, ТС путает направление связи 1:М с указателями в ЯП. Как раз несимметричная связь 1:М, позволяет иметь много картинок к одной строке... а также "внезапно", иметь каждую строку со своим набором капртинок. "1:М" фактически утверждает единственность строки, к которой привязана заданная/конкретная картинка.

Связи типа "М:М" требуются тогда (и только тогда!) когда требуется одну и туже запись о картинке сопоставить с несколькими заданными строками в других таблицах... ну типа, нам дорого плодить несколько одинаковых названий файла с картинкой... так бывает тоже. Решается, как всем известно, опять же легко добавлением доп. таблицы связи... но вот тут, возможны варианты, ибо или их надо плодить к каждой базовой сущности, или переходить на гуйид, или делать динамический скуль... чего многие СУБД - очень не любют...

Судя по другим высказываниям, пока склоняюсь к первому абзацу :)
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323595
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirВыражайтесь яснее, пожалуйста.

Читайте внимательнее и вообще подразумевается что жевать не придется.

Меня интересует либо способ идентифицировать таблицу не используя ее имя (и прочие длинные варианты), либо какой-то принципиально иной способ который не потребует использовать ее имя (и прочие длинные варианты).

Снизу-сверху положения относительные. Мост на самом деле получается посредине. Слева у него куча не уникальных parent_id (по логике отношений), справа куча не уникальных image_id. То есть реализуется модель многие ко многим.

Все было бы шиколадно если бы parent_id однозначно указывал на id реципиента.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323598
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,

зачёт.

Вам уже двое сказали что надо и как показать, чтобы спросить... DDL вашего parent_id - хде?

"Чукча - не читатель"?
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323599
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirdebloggerПри установлении связи сверху-вниз можно получить ровно 1 штуку. При установлении снизу-вверх - любое количество штук."сверху-вниз" - это, очевидно, "поле image_id в таблице". Что же такое "снизу-вверх"? С одной стороны, по аналогии это поле "table_id" в таблице images. С другой стороны, такой вариант явно не позволит установит "любое количество связей". Собственно, только одну он и сможет установить. Причём весьма специфическую
Выражайтесь яснее, пожалуйста.

deblogger -- неплохой проект. Человек
сталкнулся с одной из извесных проблем ОРМ-а
и считает что открыл Америку.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323600
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerМост на самом деле получается посредине. Слева у него куча не уникальных parent_id (по логике отношений), справа куча не уникальных image_id. То есть реализуется модель многие ко многим.Ну вот, можете же, когда захотите :)
debloggerВсе было бы шиколадно если бы parent_id однозначно указывал на id реципиента.это возможно только еслиArhat109переходить на гуйид
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323601
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

Вы - уверены, что тут именно столкновение с "известной проблемой ОРМ", а не банальная путаница в понятии "связь"?
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323604
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir
>> это возможно только если...
>>>>переходить на гуйид

врядли поможет, ведь СКЛ не может статически разрешить имя таблицы
(собствено с чего ТС и начала разговор).
Решается "легко" динамикой (генерацией) СКЛа.

СОвременные фреймворки (например ruby-on-rails) -- это делают
елемнтарно сами ---ничего даже писать не надо.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323605
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Связи типа "М:М" требуются тогда (и только тогда!) когда требуется одну и туже запись о картинке сопоставить с несколькими заданными строками в других таблицах... ну типа, нам дорого плодить несколько одинаковых названий файла с картинкой... так бывает тоже. Решается, как всем известно, опять же легко добавлением доп. таблицы связи... но вот тут, возможны варианты, ибо или их надо плодить к каждой базовой сущности, или переходить на гуйид, или делать динамический скуль... чего многие СУБД - очень не любют...

Так и записано в первом сообщении, только несколько иным языком.

За исключением отрезанной части. Откуда 1:М если совершенно ясно что будет 1:1. Примеры что ли придумывать?

create table prod (
id int auto_ blah-blah,
name varchar(50),
image varchar(255)
);

create table pubs (
id int auto_ blah-blah,
content text,
image varchar(255)
);

create table menu (
id int auto_ blah-blah,
name varchar(50),
image varchar(255)
);

create table ad (
id int auto_ blah-blah,
url varchar(50),
image varchar(255)
);

Ну и так далее


М очевидно не фигурирует.

Имена файлов вообще не при чем. Изображение характеризуется несколькими параметрами которые в данном случае продукту (а равно публикации, модели, коллекции, альбому и тп) в упор не стучат. Другими словами даже если нужна была 1 картинка, под картинки все равно была бы заведена своя таблица. А в данном конкретном случае имя файла вообще не существует, но сохраняется для имитации человеческого отношения в интерфейсе.

Пришлось-таки жевать.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323606
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109javajdbc,

Вы - уверены, что тут именно столкновение с "известной проблемой ОРМ", а не банальная путаница в понятии "связь"?

Уверен! СУдя еше и по его увереному совету
(в другом топике) раделять дату и время -- человек
явно считает себя специалистом в какой-то области --
но где-то далеко от баз данных, может доморошеный
обьектно-ориентированый товарищ.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323608
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

в первом посту было: "Но как-то все не сшивается если захотеть получать изображения."

ответ: чтобы получить изображение, в данном случае достаточно считать файл с изображением по его названию, получаемому из дочерней таблицы. Всё. Ни о каком Скуле - тут, речи нет.

, но далее имеем нечто другое: "Выкидываем из таблиц поле image_id, заводим таблицу image_list куда оно и переезжает в паре с указателем на родителя: (int id auto_increment, int parent_id, int image_id). Теперь можно связать с любой таблицей любое количество изображений."

с одной стороны автор показывает создание типичной таблицы связи М:М для заданной пары сущностей согласно описанной структуре таблицы связи...
, но потом "внезапно" переходит на связи картинок с разными сущностями "теперь .. с любой таблицей..." -- этот пассаж - откуда?!Ё

... конечно БУДЕТ проблема. Потому что из сделанного предположения, сделанный вывод - НИКАК НЕ ВЫТЕКАЕТ.

... далее, типовые решения, которых более чем достаточно в 99% конкретных случаев, "внезапно" названы "геммороем"... с чего бы это? С того, что боевая реализация "не про картинки вовсе" и там такое надо?!? или с банального непонимания, что из одного - другое тупо НЕ следует...
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323611
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109javajdbc,

в первом посту было: "Но как-то все не сшивается если захотеть получать изображения."

ответ: чтобы получить изображение

Как там выше замечено, чукча не читатель. Написано же - изображения, а не изображение. С одним никаких проблем, со многим ко многим единственная в том, что у многих может совпасть id. Самый коротки путь ввести смещение говоря языком программирования, или дополнительный критерий отбора языком запросов. Это опять же элементарно если сохранять вместе с отче_йди фамилию его семьи (имя таблицы). Я счел это расточительным и хотел узнать можно ли где-то отыскать нечто типа ID из четырех байтов.

Ну и вторая часть - может быть вообще все делается иначе, а я отстал от прогресса.

Однако пока что ни то ни другое не прояснилось ни на бит.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323612
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbctanglir
>> это возможно только если...
>>>>переходить на гуйид

врядли поможет, ведь СКЛ не может статически разрешить имя таблицы
(собствено с чего ТС и начала разговор).
Решается "легко" динамикой (генерацией) СКЛа.Да, это я чего-то не в ту степь пошёл. Подумал, что можно иметь связку "гуид-таблица", а к гуидам уже цеплять файлы. Может, был бы в такой структуре смысл, если бы ещё что-то надо было цеплять (много таблиц связей - одна для файлов, другая-третья-пятая ещё для чего-то...), чтобы не писать в каждую таблицу связи ссылку на исходную таблицу.

Но у ТСа связь всего одна, так что проще сразу делать так {имя_таблицы, ид_записи_в_таблице, ид_файла}. И потом динамикой, да, по-другому никак. Если уж так не хочется делать связки для каждой таблицы в отдельности.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323613
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerЯ счел это расточительным и хотел узнать можно ли где-то отыскать нечто типа ID из четырех байтов.

Ну и вторая часть - может быть вообще все делается иначе, а я отстал от прогресса.Нет. Но вы можете сами сделать такой велосипед (сделать метатаблицу, забить в неё все таблицы, дать каждой свой ид...).
Нет. По крайней мере в РСУБД.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323614
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,

ну вот и давайте "пожуем":

и так в первом посту у вас было решение:

Есть некоторое количество таблиц каждая со своей структурой среди которых таблица с именем, например image и полями для краткости изложения: id int auto_increment, filename varchar(255)

то есть ваш разжеванный вариант превращается в:

create table images (
id int auto increment,
file_name varchar(255),
image_data /* прочие описания картинки, если нужны */
);

/* и далее с модификацией (не называйте поля таблиц служебными словами, таки!): */

create table prod (
id int auto_ blah-blah,
name1 varchar(50),
image_id int /* можно даже добавить fkey на images */
);

create table pubs (
id int auto_ blah-blah,
content text,
image_id int /* можно даже добавить fkey на images */
);

create table menu (
id int auto_ blah-blah,
name2 varchar(50),
image_id int /* можно даже добавить fkey на images */
);

create table ad (
id int auto_ blah-blah,
url varchar(50),
image_id int /* можно даже добавить fkey на images */
);

... собственно как и написано в первом абзаце -- по номеру картинки, получаем её изображение. В чём проблема? (жуем дальше)
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323617
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109, но потом "внезапно" переходит на связи картинок с разными сущностями "теперь .. с любой таблицей..." -- этот пассаж - откуда?!Ё

В этом и весь цукерберг. Все таблицы разношерстные и все хотят быть связанными с произвольным числом изображений. Например менегер заводит номенклатуру и связывает несколько картинок с ней. Журналист пишет статью и связывает с ней несколько картинок и того же самого источника. Дизайнер делает витрину и связывает с ней несколько картинок из того же самого источника. У каждого своя таблица, но таблица изображений со всей спецификой - одна на всех. Чтобы залинковать в 1 запись больше чем 1 изображение требуется диспетчерская. Но диспетчер оказывается в неоднозначном положении на своем стуле, поскольку у каждого из вышеперечисленных пересекающийся набор идентификаторов. Епрст, вроде бы тривиально, а уже столько постов.
...
Рейтинг: 0 / 0
Где у таблицы ID?
    #38323618
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109, так, пока писал появился вариант с несколькими изображениями... ну и вариант с таблицами связи вас "чем не устраивает"?

делаем так:

create table link_prod_images (
prod_id int /* внешний ключик на таблицу prod */
, image_id int /* внешний ключик на таблицу images */
, primary_key( prod_id, images_id) /* суррогат тут явно не требуется */
);

и сопровождаем каждую сущность такой табличкой связи... чем вас этот вариант НЕ устраивает? (собственно, это ваш же второй абзац!)
...
Рейтинг: 0 / 0
25 сообщений из 71, страница 1 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Где у таблицы ID?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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