|
|
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
Добрый день! Занимаюсь помаленьку проектированием БД, необходимо организовать удобную систему связей объектов бд, а также их уникальность. БД 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 Маня Такой запрос тоже не очень мне нравится. Поделитесь опытом кто над такими вопросами уже озадачивался.) Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 08:36 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
Жэкон, честно говоря абсолютно не понял, что мешает использовать в таблицах вместо ключа непосредственно гуид. Зачем нужна отдельная таблица_с_гуидами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 09:42 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
в принципе ничего не мешает, но гуид строковый, места занимает поболее чем число, если все ссылки буду так указывать накладно получится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 10:26 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
если все гуиды вынести в отдельную таблицу и связи между объектами делать через нее, получиться экономия места, но скорость выборки упадет. к томуже таким методом можно обеспечить уникальность в пределах всей ИС ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 10:31 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
Жэконв принципе ничего не мешает, но гуид строковый, места занимает поболее чем число, если все ссылки буду так указывать накладно получится Во-первых - никакой он не строковый, а вполне себе бинарный. Ну и во-вторых- сделайте в объекте 2 поля - int и GUID. Связи внутри базы стройте по интам, а для синхронизации баз используйте гуид. А уникальность гуидов и так практически гарантирована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 11:31 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
а гуид в поле с каким типом хранить? а так идея ясна. Как быть с вопросом №2?. Не могу додумать как такие связки делать, фактически вместо 1 левого соединения надо организовать 2, причем в 1 поле. Можно с помощью "объединить" а можно левым вытащить 2 поля из разных таблиц и потом рассчитать третье, в котором будут данные из обоих таблиц, но это вообще печальный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 11:52 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
Жэкона гуид в поле с каким типом хранить? а так идея ясна. В некоторых СУБД есть специальный тип, а так - binary(16). ЖэконКак быть с вопросом №2?. Не могу додумать как такие связки делать, фактически вместо 1 левого соединения надо организовать 2, причем в 1 поле. Можно с помощью "объединить" а можно левым вытащить 2 поля из разных таблиц и потом рассчитать третье, в котором будут данные из обоих таблиц, но это вообще печальный вариант. У вас задача какая? Приведите постановку задачи, а не ваше представление о решении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 12:13 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
Задача примерна такова: реализовать в проектируемой БД возможность, в реквизитах объектов указывать ИД не из конкретной таблицы, а из произвольной. В примере выше ИД может указывать на табл2 или табл3. Подобная фишка есть в 1с. Вот как то так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 12:38 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
Жэкон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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 12:44 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
ЖэконЗадача примерна такова: реализовать в проектируемой БД возможность, в реквизитах объектов указывать ИД не из конкретной таблицы, а из произвольной. В примере выше ИД может указывать на табл2 или табл3. Подобная фишка есть в 1с. Вот как то так Смысл в этом какой? Ваши разные таблицы - это подвиды одной сущности? Или так, по приколу? PS В 1с много че есть, но в основном всякая хрень от безграмотности и последующей безысходности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 12:48 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
П-Л : Согласен пример не удачный, он лишь показывает что есть и что надо получить. iljy : Сущности разные, но имеют что то общее. В 1с это Наименование у справочников Меня в общем то интересует организация такой техники, а именно не жесткой завязкой полей содержащих ключи на таблицы с данными, а динамической, позволяющей указывать разные объекты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 13:09 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
авторСогласен пример не удачный, он лишь показывает что есть и что надо получить.Как водится на форуме, спрашиваем одно, а имеем в виду другое ? "Такую технику" и динамический SQL вообще, генерируемый с клиента, до смерти боятся дба и чистые эскуэльщики. Очень многое при этом отходит под контроль клиента. Если решение о таких нечетких, "слабых" связях взвешено и оправдано, кто запретит его вам применить ? "Универсальный справочник" считаю злом. ЕАВешные подходы применяю только в интерфесах - для "однообразного" редактирования разных данных, сидящих строго по своим таблицам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 13:18 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
Жэконiljy : Сущности разные, но имеют что то общее. В 1с это Наименование у справочников Меня в общем то интересует организация такой техники, а именно не жесткой завязкой полей содержащих ключи на таблицы с данными, а динамической, позволяющей указывать разные объекты Ради бога, вот вам сходу 2 варианта: 1. Наследование таблиц (классический) Есть базовая таблица, содержащая ключевую информацию (ид, гуид, вид сущности) и общие для всех сущностей поля. На нее (по ид) ссылаются внешние ключи. Плюс для каждого вида сущности создается отдельная таблица, содержащая ид из основной + информацию, специфическую для конкретного вида. 2. Указание вида сущности непосредственно в ссылающейся таблице. Применим, когда таких таблиц и типов сущностей очень немного (1-2-3), а от сущностей-потомков растет большая иерархия и лень городить триггеры на корректное удаление-изменение. В этом случае в ссылающейся таблице делается 2 поля данных (тип сущности, ид сущности), на которых создается несколько вычисляемых полей, которые и являются ВК на конкретные таблицы сущностей. При этом не NULL из них всегда только одно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 13:21 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
дык это от безграмотности моей) на форуме новичок )) А по сути то мне надо удобство для себя организовать, а ДБА и прочие пока что в сторонке. Думаю, иной раз лучше что то эдакое сделать, чтобы второй раз легче. Основная задача - поиметь хорошую динамику базы, но и производительность не забывать. Взвесить и определить какие связи лучше и как их организовать я пока не в состоянии, т.к. нет большого опыта. Поэтому и обратился к Вам, умудренным спеца. iljy : что то вроде первого варианта я и хочу реализовать, поэтому то и задался вопросом, "а как левое соединение делать в БД, где ссылки не на конкретную таблицу идут?". Пока что вариант с объединением только есть у меня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 14:07 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
Жэконiljy : что то вроде первого варианта я и хочу реализовать, поэтому то и задался вопросом, "а как левое соединение делать в БД, где ссылки не на конкретную таблицу идут?". Если не использовать ГУИД или какие-то соглашения о диапазонах автосчетчиков во внешних таблицах, то придется хранить не только ссылку на ID внешней таблицы, но и какой-то код, на какую таблицу ссылается данный ID. Тогда левый джоин со всеми внешними таблицами: Код: plaintext 1. 2. 3. 4. Чтобы выстроить атрибуты из всех внешни таблиц в один столбец придется написать CASE: Код: plaintext 1. 2. 3. 4. Либо собрать все внешние таблицы в один юнион, добавив к каждой свое <конкретное значение> и затем джоинить с этим набором по условиям ON tblMain.FK = <union набор>.PK AND tblMain.код = <union набор>.<конкретное значение>. Тогда кейза можно избежать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 14:21 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
если с гуидом тогда последний вариант без "AND tblMain.код = <union набор>.<конкретное значение>" можно делать. Думаю он всяко лучше чем с кейсом. Или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 14:48 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
Критерий лучшести и правильности ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 14:59 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
ЖэконДумаю он всяко лучше чем с кейсом. Или я не прав? Вовсе не обязательно. Во-первых - тут никак не получится сделать ВК, соответсвенно никакой проверки целостности. А во-вторых - оптимизатор может на таких запросах себя вести не очень хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 15:09 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
Жэкон, и кстати, вместо case тут вполне подойдет coalesce. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 15:11 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
П-ЛКритерий лучшести и правильности ? в данном случае, то что быстрее работает то для меня и лучше)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 15:14 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
ЖэконП-ЛКритерий лучшести и правильности ? в данном случае, то что быстрее работает то для меня и лучше)) Какова мощность данных ? Сколько будет аналогичных внешних таблиц ? При ограниченном количестве записей во внешних таблицах почему бы не сделать диапазонные автосчетчики ? И вы все-таки не описали первоначальную задачу в бизнес-терминах. Мы обсуждаем только с ваш подход к ее решению. Не факт, что он правильный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 15:17 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
iljyВовсе не обязательно. Во-первых - тут никак не получится сделать ВК, соответсвенно никакой проверки целостности. А во-вторых - оптимизатор может на таких запросах себя вести не очень хорошо. Насчет ВК это да казус, целостность организовать в программе можно. А может можно вьхами делать? Тогда и ВК получиться если я не ошибаюсь coalesce я прогуглю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 15:22 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
ЖэконНасчет ВК это да казус, целостность организовать в программе можно. Это порочный путь Жэкон А может можно вьхами делать? Тогда и ВК получиться если я не ошибаюсь Вьюхами делать что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 15:29 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
П-ЛКакова мощность данных ? Сколько будет аналогичных внешних таблиц ? При ограниченном количестве записей во внешних таблицах почему бы не сделать диапазонные автосчетчики ? И вы все-таки не описали первоначальную задачу в бизнес-терминах. Мы обсуждаем только с ваш подход к ее решению. Не факт, что он правильный. Мощность данных не очень большая, порядка 100 документов в день, иногда очень большие, с 1000 позиций, загрузка номенклатуры с характеристика, порядка несколько десятков тысяч. Аналогичных таблиц внешних в принципе не будет, некоторые могут иметь одинаковые поля. Диапазонные автосчетчики честно говоря не знаю, но подозреваю что будут непонятные моменты по обмену даннымми между узлами Вообще замысел, реализовать систему, с повышенной гибкостью, не такой как у 1с, но и не как у самописок. Нечто среднее. Где то упростить, где то организовать готовый функционал, чтобы в последствии оперативно работать. Первая задача организация структуры данных грамотная. На данный момент база 1с 10 гб, все нужно и все жалко удалять. Поэтому есть куда стремиться и развиваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 15:47 |
|
||
|
Удобная система связей и уникальность объектов в Распределенной БД
|
|||
|---|---|---|---|
|
#18+
iljyЖэконНасчет ВК это да казус, целостность организовать в программе можно. Это порочный путь Жэкон А может можно вьхами делать? Тогда и ВК получиться если я не ошибаюсь Вьюхами делать что? Во вьюхе делать объединение. и на вьюху ВК цеплять. Или это тоже некашерно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 15:49 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37408024&tid=1542053]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 491ms |

| 0 / 0 |
