powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Удобная система связей и уникальность объектов в Распределенной БД
25 сообщений из 38, страница 1 из 2
Удобная система связей и уникальность объектов в Распределенной БД
    #37407140
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Занимаюсь помаленьку проектированием БД, необходимо организовать удобную систему связей объектов бд, а также их уникальность. БД MySQL, производительность важна.

Возникли вопросы:

1. Как лучше организовать систему ссылок (база будет распределенной, необходимо поддерживать уникальность объектов), думаю сделать отдельную таблицу с гуидами (обеспечат уникальность по всей ИС) во всех ключах указывать ID гуида. Ну а при обмене данными работать с гуидами. Но этот метод мне кажется будет не очень удобным, да и ресурсы пострадают (связей будет много, и все в 1 таблице).

2. Как лучше поступить в случае, когда необходимо организовать возможность указывать в поле одной таблицы, ключи на записи разных таблиц:

табл 1 (поле 1 содержит ключ на таблицы 2 и 3)
ИД Поле1
1 2_4
2 2_5
3 3_6

табл 2
ИД имя
4 Вася
5 Петя

табл 3
ИД имя
6 Маня


Думаю это можно решить используя дополнительную таблицу (с гуидом как в п1 описано).
Запросы будут выглядеть примерно так: ВЫБРАТЬ т1.ИД, вз.имя ИЗ табл1 ЛЕВОЕ СОЕД (таблсгуидом левое соединение (Табл2 объединить Табл3 )) КАК вз ПО Табл1.Поле1=вз.ИД

Результат :
ИД Имена,Прицепленные из двух таблиц
1 Вася
2 Петя
3 Маня

Такой запрос тоже не очень мне нравится.

Поделитесь опытом кто над такими вопросами уже озадачивался.)

Спасибо!
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407218
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жэкон,

честно говоря абсолютно не понял, что мешает использовать в таблицах вместо ключа непосредственно гуид. Зачем нужна отдельная таблица_с_гуидами?
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407295
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в принципе ничего не мешает, но гуид строковый, места занимает поболее чем число, если все ссылки буду так указывать накладно получится
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407304
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если все гуиды вынести в отдельную таблицу и связи между объектами делать через нее, получиться экономия места, но скорость выборки упадет. к томуже таким методом можно обеспечить уникальность в пределах всей ИС
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407474
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жэконв принципе ничего не мешает, но гуид строковый, места занимает поболее чем число, если все ссылки буду так указывать накладно получится
Во-первых - никакой он не строковый, а вполне себе бинарный. Ну и во-вторых- сделайте в объекте 2 поля - int и GUID. Связи внутри базы стройте по интам, а для синхронизации баз используйте гуид. А уникальность гуидов и так практически гарантирована.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407514
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а гуид в поле с каким типом хранить? а так идея ясна.

Как быть с вопросом №2?. Не могу додумать как такие связки делать, фактически вместо 1 левого соединения надо организовать 2, причем в 1 поле. Можно с помощью "объединить" а можно левым вытащить 2 поля из разных таблиц и потом рассчитать третье, в котором будут данные из обоих таблиц, но это вообще печальный вариант.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407582
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жэкона гуид в поле с каким типом хранить? а так идея ясна.
В некоторых СУБД есть специальный тип, а так - binary(16).
ЖэконКак быть с вопросом №2?. Не могу додумать как такие связки делать, фактически вместо 1 левого соединения надо организовать 2, причем в 1 поле. Можно с помощью "объединить" а можно левым вытащить 2 поля из разных таблиц и потом рассчитать третье, в котором будут данные из обоих таблиц, но это вообще печальный вариант.

У вас задача какая? Приведите постановку задачи, а не ваше представление о решении.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407667
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача примерна такова: реализовать в проектируемой БД возможность, в реквизитах объектов указывать ИД не из конкретной таблицы, а из произвольной. В примере выше ИД может указывать на табл2 или табл3.

Подобная фишка есть в 1с.

Вот как то так
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407682
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жэкон2. Как лучше поступить в случае, когда необходимо организовать возможность указывать в поле одной таблицы, ключи на записи разных таблиц:

табл 1 (поле 1 содержит ключ на таблицы 2 и 3)
ИД Поле1
1 2_4
2 2_5
3 3_6

табл 2
ИД имя
4 Вася
5 Петя

табл 3
ИД имя
6 Маня

Думаю это можно решить используя дополнительную таблицу (с гуидом как в п1 описано).
Запросы будут выглядеть примерно так: ВЫБРАТЬ т1.ИД, вз.имя ИЗ табл1 ЛЕВОЕ СОЕД (таблсгуидом левое соединение (Табл2 объединить Табл3 )) КАК вз ПО Табл1.Поле1=вз.ИД

Результат :
ИД Имена,Прицепленные из двух таблиц
1 Вася
2 Петя
3 Маня


Ваш пример не выдерживает критики - вы распихали однообразные данные по раличным таблицам и потом хотите динамически менять таблицу подставновки FK.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407692
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖэконЗадача примерна такова: реализовать в проектируемой БД возможность, в реквизитах объектов указывать ИД не из конкретной таблицы, а из произвольной. В примере выше ИД может указывать на табл2 или табл3.

Подобная фишка есть в 1с.

Вот как то так
Смысл в этом какой? Ваши разные таблицы - это подвиды одной сущности? Или так, по приколу?
PS В 1с много че есть, но в основном всякая хрень от безграмотности и последующей безысходности.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407752
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П-Л :
Согласен пример не удачный, он лишь показывает что есть и что надо получить.


iljy :
Сущности разные, но имеют что то общее. В 1с это Наименование у справочников

Меня в общем то интересует организация такой техники, а именно не жесткой завязкой полей содержащих ключи на таблицы с данными, а динамической, позволяющей указывать разные объекты
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407778
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСогласен пример не удачный, он лишь показывает что есть и что надо получить.Как водится на форуме, спрашиваем одно, а имеем в виду другое ?

"Такую технику" и динамический SQL вообще, генерируемый с клиента, до смерти боятся дба и чистые эскуэльщики. Очень многое при этом отходит под контроль клиента. Если решение о таких нечетких, "слабых" связях взвешено и оправдано, кто запретит его вам применить ?

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

Меня в общем то интересует организация такой техники, а именно не жесткой завязкой полей содержащих ключи на таблицы с данными, а динамической, позволяющей указывать разные объекты
Ради бога, вот вам сходу 2 варианта:
1. Наследование таблиц (классический)
Есть базовая таблица, содержащая ключевую информацию (ид, гуид, вид сущности) и общие для всех сущностей поля. На нее (по ид) ссылаются внешние ключи. Плюс для каждого вида сущности создается отдельная таблица, содержащая ид из основной + информацию, специфическую для конкретного вида.
2. Указание вида сущности непосредственно в ссылающейся таблице.
Применим, когда таких таблиц и типов сущностей очень немного (1-2-3), а от сущностей-потомков растет большая иерархия и лень городить триггеры на корректное удаление-изменение. В этом случае в ссылающейся таблице делается 2 поля данных (тип сущности, ид сущности), на которых создается несколько вычисляемых полей, которые и являются ВК на конкретные таблицы сущностей. При этом не NULL из них всегда только одно.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407873
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дык это от безграмотности моей) на форуме новичок ))

А по сути то мне надо удобство для себя организовать, а ДБА и прочие пока что в сторонке. Думаю, иной раз лучше что то эдакое сделать, чтобы второй раз легче. Основная задача - поиметь хорошую динамику базы, но и производительность не забывать.

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

iljy : что то вроде первого варианта я и хочу реализовать, поэтому то и задался вопросом, "а как левое соединение делать в БД, где ссылки не на конкретную таблицу идут?".

Пока что вариант с объединением только есть у меня
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407896
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жэконiljy : что то вроде первого варианта я и хочу реализовать, поэтому то и задался вопросом, "а как левое соединение делать в БД, где ссылки не на конкретную таблицу идут?".
Если не использовать ГУИД или какие-то соглашения о диапазонах автосчетчиков во внешних таблицах, то придется хранить не только ссылку на ID внешней таблицы, но и какой-то код, на какую таблицу ссылается данный ID. Тогда левый джоин со всеми внешними таблицами:

Код: plaintext
1.
2.
3.
4.
SELECT ...
FROM tblMain
LEFT JOIN dic1 ON tblMain.FK = dic1.PK AND tblMain.код = <конкретное значение  1 > 
LEFT JOIN dic2 ON tblMain.FK = dic2.PK AND tblMain.код = <конкретное значение  2 > 
LEFT JOIN dic3 ON tblMain.FK = dic3.PK AND tblMain.код = <конкретное значение  3 >


Чтобы выстроить атрибуты из всех внешни таблиц в один столбец придется написать CASE:

Код: plaintext
1.
2.
3.
4.
Attribute = CASE tblMain.код
   WHEN <конкретное значение  1 >  THEN dic1.Attribute 
   WHEN <конкретное значение  2 >  THEN dic2.Attribute  
   WHEN <конкретное значение  3 >  THEN dic3.Attribute  
END

Либо собрать все внешние таблицы в один юнион, добавив к каждой свое <конкретное значение> и затем джоинить с этим набором по условиям
ON tblMain.FK = <union набор>.PK AND tblMain.код = <union набор>.<конкретное значение>.
Тогда кейза можно избежать.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407956
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если с гуидом тогда последний вариант без "AND tblMain.код = <union набор>.<конкретное значение>" можно делать.

Думаю он всяко лучше чем с кейсом. Или я не прав?
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37407984
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критерий лучшести и правильности ?
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37408004
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖэконДумаю он всяко лучше чем с кейсом. Или я не прав?
Вовсе не обязательно. Во-первых - тут никак не получится сделать ВК, соответсвенно никакой проверки целостности. А во-вторых - оптимизатор может на таких запросах себя вести не очень хорошо.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37408009
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жэкон,

и кстати, вместо case тут вполне подойдет coalesce.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37408015
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П-ЛКритерий лучшести и правильности ?

в данном случае, то что быстрее работает то для меня и лучше))
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37408024
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖэконП-ЛКритерий лучшести и правильности ?
в данном случае, то что быстрее работает то для меня и лучше))
Какова мощность данных ? Сколько будет аналогичных внешних таблиц ? При ограниченном количестве записей во внешних таблицах почему бы не сделать диапазонные автосчетчики ?

И вы все-таки не описали первоначальную задачу в бизнес-терминах. Мы обсуждаем только с ваш подход к ее решению. Не факт, что он правильный.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37408037
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iljyВовсе не обязательно. Во-первых - тут никак не получится сделать ВК, соответсвенно никакой проверки целостности. А во-вторых - оптимизатор может на таких запросах себя вести не очень хорошо.

Насчет ВК это да казус, целостность организовать в программе можно. А может можно вьхами делать? Тогда и ВК получиться если я не ошибаюсь


coalesce я прогуглю.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37408057
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖэконНасчет ВК это да казус, целостность организовать в программе можно.

Это порочный путь
Жэкон А может можно вьхами делать? Тогда и ВК получиться если я не ошибаюсь
Вьюхами делать что?
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37408098
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П-ЛКакова мощность данных ? Сколько будет аналогичных внешних таблиц ? При ограниченном количестве записей во внешних таблицах почему бы не сделать диапазонные автосчетчики ?

И вы все-таки не описали первоначальную задачу в бизнес-терминах. Мы обсуждаем только с ваш подход к ее решению. Не факт, что он правильный.

Мощность данных не очень большая, порядка 100 документов в день, иногда очень большие, с 1000 позиций, загрузка номенклатуры с характеристика, порядка несколько десятков тысяч. Аналогичных таблиц внешних в принципе не будет, некоторые могут иметь одинаковые поля.

Диапазонные автосчетчики честно говоря не знаю, но подозреваю что будут непонятные моменты по обмену даннымми между узлами

Вообще замысел, реализовать систему, с повышенной гибкостью, не такой как у 1с, но и не как у самописок. Нечто среднее. Где то упростить, где то организовать готовый функционал, чтобы в последствии оперативно работать. Первая задача организация структуры данных грамотная. На данный момент база 1с 10 гб, все нужно и все жалко удалять. Поэтому есть куда стремиться и развиваться.
...
Рейтинг: 0 / 0
Удобная система связей и уникальность объектов в Распределенной БД
    #37408108
Жэкон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iljyЖэконНасчет ВК это да казус, целостность организовать в программе можно.

Это порочный путь
Жэкон А может можно вьхами делать? Тогда и ВК получиться если я не ошибаюсь
Вьюхами делать что?

Во вьюхе делать объединение. и на вьюху ВК цеплять. Или это тоже некашерно?
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Удобная система связей и уникальность объектов в Распределенной БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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