powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как? реализовать связь "много-ко-многим"
53 сообщений из 53, показаны все 3 страниц
как? реализовать связь "много-ко-многим"
    #39397968
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго время суток!
что-то нет не малейшего представления как это сделать, подскажите хоть область математики? которая таким занимается))

имеем:
таблица Z(id) - записи - они же значения записи, 1,2,3,4,5
таблица X(id) - 1,2,3,4,5,6,7
таблица Y(id) - 1
таблица XZ(X_id,Z_id) - (1,1),(1,2),(1,3),(2,1),(2,2),(3,1),(4,2),(5,3),(6,4),(7,5)
таблица XY(X_id,Y_id) - (1,1),(1,2),(1,3),(1,4),(1,5)

И да мне самому стыдно так DDL рисовать))

задача: имею запись y, знаю что у нее в табличной части есть сточки 12345,
знаю что в таблице X, есть записи в табличных частях которых есть строчки 123,12,1,2,3,4,5
мне нужно получить записи Х, чтобы значения табличных частей не пересекались, а из тех где пересекаются выбрать максимальное соответствие, т.е. имея 12345 нужно достать, 123,4,5 ! записи 12,1,2,3 попасть не должны!
имея 1245 нужно достать, 12,4,5

на всякий случай уточню что таблица X утверждается вначале года, и пару лет изменений не было и не планируется, и содержит она записи 123,12,1,2,3,4..... т.е. 123 выполняется либо целиком 123, либо бьется на 12,3 либо совсем на 1,2,3 все остальные записи с другими не стыкуются.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39397975
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepals,

Какой-то поток сознания.
Откуда взялись "табличные части" и где они в описании "имеем"?
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39397983
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пытался думать в сторону регулярок но ..
думал вот сюда =):
select first 1 x.id,count(yz.z_id) from x
inner join xz on z.x_id=x.id
inner join yz on yz.z_id=xz.z_id
group by x.id
order by 2 desc

нашел 123, как теперь найти 4,5??
таблица XY(X_id,Y_id) - накосячил, там таблица YZ(y_id,z_id)
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39397987
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну ладно, поток сознания чтоб в предметную область не вникать.
есть прививки
Дифтерия-Коклюш-Столбняк,
Дифтерия-Столбняк,
Дифтерия,
Коклюш,
Столбняк

и отдельно
Гепатит B
Полиомиелит.


есть куча вакцин, с помощью которых они могут быть выполнены. можно 1 вакциной выполнить как все 5 так и 4 так и 3 так и 2 так и 1 прививку, задача, зная вакцину, отметить человеку выполнение прививок.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398069
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это называется связь "много-ко-многим", традиционно реализуется через 2 таблицы сущностей и таблицу связей.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398077
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepals,

насколько я помню, связи M-M физически не существует, она реализуется через 1-M - M-1. То есть, даже если case-инструмент позволяет сделать такую связь, при генерировании физической модели он создаст промежуточную таблицу.
Например, есть заказы, и есть товары. В одном заказе может быть несколько товаров, и один товар может продаваться в разных заказах.
Здесь заказы к товарам это M-M. Но придется создавать промежуточную таблицу "продажи" (или любое другое название), в которой 2 столбца (ПК) - код товара и код заказа.
тогда заказы 1 к продажи М, продажи М к товарам 1

Что и обеспечивает конечную связь M-M.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398084
Progger83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через 3 таблицу м-м реализуется. Вот только есть ощущение, что автору не нужно м-м. Но можно сделать для этого случая какой-нибудь хэш.
Вакцина1 2.3.4.
Вакцина2 1.2.3.
Вакцина3 4.5.6.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398093
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мда согласен... но это пол дела, мне надо исключить из "много-ко-многим" записи в которых есть "пересечения"
т.е. имея вакцину АКДС(коклюш,дифтерия,столбняк) - я должен достать только запись из таблицы прививок КДС!
Записи ДС,К,Д,С - не удовлетворяют условию. Вопрос как такое условие написать?

Более того я вполне понимаю, что возможно неправильно проектирую БД, и сейчас у меня именно так как Вы и описали.
Сущность Прививки, сущность вакцины, и регистр(он же табличная часть) для таблицы прививки, где указываю какими вакцинами она может быть выполнена.

Но сейчас склоняюсь в сторону того что у сущностей прививки и вакцины должны быть регистры "диагнозов(болезней)", и зная их определять соответствие. Диагнозы точно нужны для других целей отчётности, и я как раз таким образом пытаюсь избавиться от "традиционной таблицы связей" считая её избыточной, даже не для хранения, а для ввода данных пользователем.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398103
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После долгих бесед с врачами и вникания в предметную область .... подумал что должна быть связь 1-М, 1 человек много прививок, и вся отчётность работает с прививками! но спустя некоторое время сообразил, врач вводит вакцину 1 раз, е ему надо проставить её в 3 прививки(врач видит список прививок).
Сейчас пришел к тому что врач должен вводить вакцины! а в мой регистр 1-М(1 человек много прививок) - должны добавляться прививки для отчётности. НО! внося прививку КДС, я хочу добавить 1 запись, а не все 5 подходящих, если вязать много ко многим.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398123
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsя хочу добавить 1 запись, а не все 5 подходящих

Тогда тебе следует различать сущности "прививки" и "привитые болезни".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398128
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати я же говорю так как вы предлагаете так есть сейчас! т.е. есть 3 таблица в которой связаны прививки вакцины, но почему мне это не нравится, предположим у меня есть вакцина КДС, а у пациенту надо сделать прививку ДС! а после этого через год, ему придумают какой нибудь коклюш+гепатит, - и эта прививка ему не выполнена, так как выполнен только коклюш.
т.е. в регистре пациент+прививка, я увижу только ДС, и если я буду искать К, я его не найду! т.е. я думаю свести к атомарным записям надежней, чем меняющийся состав прививок....
П.С. хотя на сколько я понимаю ситуация описанная в данном сообщении практически исключена, прививки либо не меняются либо не чаще чем раз в 10 лет, вакцины появляются чаще. Но делаю сейчас то что делаю исходя из соображений "атомарности", хочу знать что выполнено по факту, откуда подберу, то что хочет врач.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398130
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovsdepalsя хочу добавить 1 запись, а не все 5 подходящих

Тогда тебе следует различать сущности "прививки" и "привитые болезни".


- так вот я и хочу же, от прививок уйти к привитым болезням. хотя врачу нужны именно прививки а не привитые болезни. Но отображение дело второе, там вопросов нет.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398134
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как редактировать сообщение?)
точней я хочу хранить привитые болезни, но пользователю нужно отображать прививки
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398148
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsкак редактировать сообщение?)
Ни как.


sdepalsточней я хочу хранить привитые болезни, но пользователю нужно отображать прививки
А что, со временем одна и та же вакцина может применяться против большего числа болезней?
1. Если НЕТ, то название вакцины "скажет" (её ID) от чего она.
2. Если ДА, то почему бы ей не стать "новой вакциной" в табличке "Вакцины". Тогда ни чего переделывать в будущем не придется. И всё вернется к п.1
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398161
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepals,

Делай как в жизни, это самое правильное. Первая Таблица - это вакцины, Вторая таблица - это прививки, Третья таблица - это связующая между вакцинами и прививками. Например, запись в первой "АКДС" должна иметь трёх детей в связующей таблице, котрые имеют связь с прививками.
Чтобы найти какую вакцину нужно применить для определённых прививок, нужен запрос по промежуточной (связующей) таблице. Но это уже дело второе.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398171
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdepalsточней я хочу хранить привитые болезни, но пользователю нужно отображать прививки
А что, со временем одна и та же вакцина может применяться против большего числа болезней?
1. Если НЕТ, то название вакцины "скажет" (её ID) от чего она.
2. Если ДА, то почему бы ей не стать "новой вакциной" в табличке "Вакцины". Тогда ни чего переделывать в будущем не придется. И всё вернется к п.1[/quot]

Немного не так. Вакцина и кол-во болезней ей привитых не изменится! А вот в прививках которыми "оперируют" врачи, я не уверен.
Не исключено, что врач 2 пациентам введет вакцину КДС, но попросит одному отобразить ее как КДС, а другому как ДС+К

а ID вакцины скажет мне что ей можно выполнить прививки КДС,ДС,К,Д,С - 5 штук. а отобразить надо только ту где совпало максимальное кол-во диагнозов - КДС. Есть еще Корь,Краснуха,Паротит - которая бьется также, но вроде не видел вакцин пересекающихся между ККП и чем то другим.

П.С. но хоть прививки новые и не появляются, новые вакцины штампуют постоянно, и сейчас норма по 3 прививки одной вакциной делать, но уже есть всякие пентаксим - от слова пять, Инфанриксы - Гекса - от слова 6. И вполне возможно со временем будет нормой не тройная а четверная прививка. Есть такая штука календарь вакцинации - стандарт! И там планируют когда чего колоть, сейчас КДС - это одна строчка, а если что-то изменится, то как то не хочется, десяткам клиентов перебивать регистр М-М прививка-вакцина.
А вот в случае атомарных болезней ситуация выглядит лучше. Так что всё еще думаю, что от М-М прививка-вакцина, надо избавиться, и как то запросом доставать данные из схемы 1-М:М-1
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398180
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXIsdepals,

Третья таблица - это связующая между вакцинами и прививками. Например, запись в первой "АКДС" должна иметь трёх детей в связующей таблице, котрые имеют связь с прививками.

Сейчас именно так и есть:
для одной вакцины КДС, в связующей таблице 5 записей КДС,ДС,К,Д,С.
Банально удалив из этой таблицы связи вакцины КДС и прививок ДС,К,Д,С - задача будет решена.

И я вижу что вы все клоните к этому сценарию )) просто мне кажется что нужно 1-М:М-1.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398185
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsНе исключено, что врач 2 пациентам введет вакцину КДС, но попросит одному отобразить ее как КДС, а другому как ДС+К

Должно быть отмечено ID примененной вакцины. И пофех кто, как и в куда там махинирует называет ее.
Тогда всегда можно построить связь Вакцина - Болезнь, было или нет, кому, когда и сколько.

А то колют экс_кулапы по 5 раз ДифТирит против Ветрянки.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398199
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем в частности из ответа kdv, я понял останавливаюсь на таблице связке вакцина прививка, хорошо!

Тогда другой вопрос:
имеем таблицу связь вакцина-прививка, и таблицу связь пациент - прививка. И даже в независимости от этого денормализовано храню отдельную таблицу пациент-вакцина.

Дальше случается нечто. и в таблице вакцина-прививка, имеющей записи КДС и гепатит,
обе эти записи удаляют, и добавляют две новые КД и СГ ? Что делать?
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398210
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно вы все утверждаете, и мои первые рассуждения, что правильно сделать таблицу связь вакцина-прививка.

но вот постом выше описанные действия вводят в тупик! удаляем 3-1 из таблицы связь вакцина-прививка, и меняем на 2-2,
и чтоб восстановить данные, зная выполненные прививки, придется сделать нечто, реализующее то что я спросил в первом сообщении.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398222
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdepals, запрети удалять, а апдейты протоколируй.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398229
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsдействия вводят в тупик!Не извивайся ужом и не при против науки.
проектируй по букварю типичную связь MxM и запросы станут тривиальными и читаемыми, а не для sql-ex.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398230
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsДальше случается нечто. и в таблице вакцина-прививка, имеющей записи КДС и гепатит,
обе эти записи удаляют, и добавляют две новые КД и СГ ? Что делать?
А кто сказал удаляют физически?
Если врач не видит старую (снятую) вакцину в списке - она для него "удалена"?
Значит нужно еще поле "ACT" = 1 активна вакцина, = 0 - ее не показываем персоналу в списке.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398239
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsKreatorXXIsdepals,

Третья таблица - это связующая между вакцинами и прививками. Например, запись в первой "АКДС" должна иметь трёх детей в связующей таблице, котрые имеют связь с прививками.

Сейчас именно так и есть:
для одной вакцины КДС, в связующей таблице 5 записей КДС,ДС,К,Д,С.
Банально удалив из этой таблицы связи вакцины КДС и прививок ДС,К,Д,С - задача будет решена.

И я вижу что вы все клоните к этому сценарию )) просто мне кажется что нужно 1-М:М-1.
Не так. В связующей таблице должно быть три записи, а не пять (к, Д, С). Напиши примерную структуру таблиц "Вакцины" и "Прививки". Связующую нарисую.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398241
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsимеющей записи КДС и гепатит,
обе эти записи удаляют, и добавляют две новые КД и СГ ? Что делать?
я в этой предметной записи не разбираюсь, но выглядит это как
"пациенту удалили аппендицит. А потом вдруг оказалось, что почку".

но мне кажется, что у вас проблема с определением сущностей и их связей.
sdepalsт.е. имея вакцину АКДС(коклюш,дифтерия,столбняк) - я должен достать только запись из таблицы прививок КДС!
Записи ДС,К,Д,С - не удовлетворяют условию. Вопрос как такое условие написать?
АКДС - это ОДНА прививка, как я понял, а не 4 (или 3). Другое дело, что такая прививка состоит из частей.

1 человек - много прививок
1 прививка - 1 вакцина? несколько?
1 вакцина - несколько заболеваний. Верно?
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398304
Progger83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор взрывает мозг своими сообщениями.
Почитай как реализовать м-м и сделай так же.
И не надо велосипед изобретать.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398311
Progger83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Связь многие-ко-многим создается с помощью трех таблиц. Две таблицы – “источника” и одна соединительная таблица. Первичный ключ соединительной таблицы A_B – составной. Она состоит из двух полей, двух внешних ключей, которые ссылаются на первичные ключи таблиц A и B.
Это все, что нужно для создания м-м
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398472
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,
в этой предметной области даже врачи прививки с вакцинами путают. Хотя с точки зрения программиста всё понятно, пример с почкой и аппендицитом не актуален, потому что в любом случае удалены и почка и аппендицит, но сегодня у меня одна бумажка а завтра другая и после завтра третья. которые выводят мне одинаковые данные, но в различных раскладках.

1 человек - много прививок //Да!
1 прививка - 1 вакцина? несколько?//в таблице связи прививки вакцины, много прививок - много вакцин.
1 вакцина - несколько заболеваний. //Да!

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

1.Есть документ Национальный календарь вакцинации, выпускается раз в год. В нём "планируется" схема прививок(схема - это возраст-прививка. Схема может меняться! Вашим родителям кололи прививку от оспы, вашим детям от пневмококка, а тем кому до 30 ни того ни другого - вот 3 схемы, и повезло что тут прививки одиночные.)
http://birth-info.ru/79/Kalendar-privivok-na-2017-god/
2. Согласно схеме по календарю врач берет вакцину и вакцинирует пациента!
3. Выдает пациенту регламентную(хотя всем пофиг рисуют по разному) форму - сертификат прививок! Именно прививок!
4. Делают десятки отчётов привитости по диагнозу, и отчёты по выполненным прививкам.

Название прививки из календаря - "Первая вакцинация против дифтерии, коклюша, столбняка"
Схема вакцинации сейчас КДС V1,КДС V2,КДС V3, КДС R1, ДС R2, ДС R3 где V1...R3 - тупо своеобразная нумерация(порядковый номер).
Но первые 4 прививки могут делаться одной вакциной 5,6 другой, - и это всё к тому что вакцины статичны. прививки могут меняться. И я хочу зная вакцину, достать прививки.

Di_LIne,
спасибо, я даже на полсекунды подумал что проблема решена буду их посылать. Вначале я думал, что в таблице прививки и таблице связи прививки вакцины буду добавлять и удалять записи. В принципе да удалять ничего не надо если были сделаны прививки КДС и гепатит, а сейчас таких прививок нет, а есть КД и С+гепатит. То подделывать не надо ведь реально было по другому и надо вывести как было! Но даже в таком случае у меня будет задача подсветить(уведомить врача) что КД и С+гепатит, делать ненадо! так как ранее вакцинированы "аналогами".

Отсюда повторяюсь отвечая Ivan_Pisarevsky,
Данные хранятся М:М! но вопрос уже в другом, мне всё равно нужно достать прививки с непересекающимися болезнями, а из тех где болезни пересекаются, выбирать одну! с наибольшим кол-вом пересечений.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398473
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI, .fdb приложил.
Progger83, молодец но ты опоздал, с м-м определились, все как ты написал так и есть, я спрашиваю, как
из м-м удалить связи, добавить другие, и получить "физически" разный но в "сумме" одинаковый результат!
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398478
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DDL
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398486
Progger83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsKreatorXXI, .fdb приложил.
Progger83, молодец но ты опоздал, с м-м определились, все как ты написал так и есть, я спрашиваю, как
из м-м удалить связи, добавить другие, и получить "физически" разный но в "сумме" одинаковый результат!
Не улавливаю сути вопроса. Удаляем строку из третьей таблицы, связи нет.
Что значит физически разный, но в сумме одинаковый?
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398493
Sia-Ori1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Progger83Что значит физически разный, но в сумме одинаковый?видимо, речь о замене вакцин с тем, чтобы результат (иммунитет к списку болезней) оставался тем же самым.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398500
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdepalsВообщем в частности из ответа kdv, я понял останавливаюсь на таблице связке вакцина прививка, хорошо!

Тогда другой вопрос:
имеем таблицу связь вакцина-прививка, и таблицу связь пациент - прививка. И даже в независимости от этого денормализовано храню отдельную таблицу пациент-вакцина.

Дальше случается нечто. и в таблице вакцина-прививка, имеющей записи КДС и гепатит,
обе эти записи удаляют, и добавляют две новые КД и СГ ? Что делать?

прививки разные, но каждая болезнь привита по 1 разу, до и после манипуляций.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398521
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsя спрашиваю, как из м-м удалить связи, добавить другие, и получить "физически" разный но в "сумме" одинаковый результат!"Нет такой проблемы, которую нельзя решить введением ещё одного уровня абстракции".
Следовательно, надо сделать несколько связей многие-ко-многим и для каждой такой связи создать отдельную "промежуточную третью таблицу".
Можно ли во всём этом не запутаться? Не знаю, но наверное, можно.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398616
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepals,

Посмотрел таблицы. По большому счёту всё правильно. Таблица REG_PRIVIVKI является связующей между REF_PRIVIVKI и REF_VACCINE. Я бы первичный ключ в ней сделал не такой и в каскадном удалении и изменении форейн ключа не уверен. Сейчас вопрос как найти вакцину для определённой прививки?
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39398900
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наоборот, зная вакцину(ID=9, против всех 6 болезней) найти прививки.
В DOC_PATIENT_PLAN_PRIV для пациента 1, видишь прививки (ID - 1,6,7,8) - Коклюш-Дифтерия-Столбняк,Гепатит B,Полиомиелит,Гемофильная инфекция.
теперь удали прививки (предположим у них появилось поле IS_HIDE(скрыт) ID - 1,6,7,8) и зная связи вакцина-диагноз-привика напиши запрос, выводящий прививки (ID 9,10) - Коклюш-Дифтерия-Столбняк-Гепатит,Полиомиелит-Гемофильная как у 2 пациента

либо как-то используя REG_PRIVIVKI, зная что пациенту были выполнены (ID - 1,6,7,8), выведи (ID 9,10).
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399087
Sia-Ori1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Планы прививок тоже стоило бы добавить, наверное.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399156
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsНаоборот, зная вакцину(ID=9, против всех 6 болезней) найти прививки.
В DOC_PATIENT_PLAN_PRIV для пациента 1, видишь прививки (ID - 1,6,7,8) - Коклюш-Дифтерия-Столбняк,Гепатит B,Полиомиелит,Гемофильная инфекция.
теперь удали прививки (предположим у них появилось поле IS_HIDE(скрыт) ID - 1,6,7,8) и зная связи вакцина-диагноз-привика напиши запрос, выводящий прививки (ID 9,10) - Коклюш-Дифтерия-Столбняк-Гепатит,Полиомиелит-Гемофильная как у 2 пациента

либо как-то используя REG_PRIVIVKI, зная что пациенту были выполнены (ID - 1,6,7,8), выведи (ID 9,10).

Ну прививки получить-то просто:
Код: sql
1.
2.
3.
4.
select a.*
from REF_PRIVIVKI a
       inner join REG_PRIVIVKI b on b.PRIV=a.ID
where b.VAC=9



Получить прививки, которые не сделаны конкретному пациенту, тоже в общем-то просто:
Код: sql
1.
2.
3.
4.
5.
6.
select a.*
from REF_PRIVIVKI a
       inner join REG_PRIVIVKI b on b.PRIV=a.ID
where b.VAC=9 and not exists ( select c.ID
                                           from DOC_PATIENT_PLAN_PRIV c
                                           where c.PATIENT=1 and c.PRIV=b.PRIV



Что-то не так? Ещё какие условия?
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399420
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
норм, а теперь тоже самое не удаляя ID - 1,6,7,8, выведи 9,10.
Весь сыр бор затеян с учётом что разные прививки подойдут под условие.

и тогда
Код: sql
1.
2.
3.
4.
select a.*
from REF_PRIVIVKI a
       inner join REG_PRIVIVKI b on b.PRIV=a.ID
where b.VAC=9



вернёт 1,6,7,8,9,10. - А надо 9,10.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399481
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepals,

Ну давай условия на на прививки (1,6,7,8). Куда они деваются? Сделаны уже?
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399574
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Условие, раньше были некие прививки 11,12 - неважно какие, сделаны одной вакциной 9!
теперь они удалены и вместо них добавлены 1,6,7,8,9,10. аналогом прививок 11,12 являются группы(1,6,7,8) или (9,10).
Ты должен выбрать(9,10) по принципу что в них больше всего совпадений, и нет пересечений болезней.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399577
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Бьём по карману идиота, их удалившего из базы.
2) Восстанавливаем БД из бэкапа.
3) Профит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399595
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov3) Профит.

Категорически не согластный!
Не то что лечиться, а даже входить в такое мед. заведение.
Кто может дать гарантию, что завтра у тебя лично не найдут родильную горячку?

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

Несколько минут я сидел, как громом пораженный, потом с безразличием отчаяния принялся переворачивать страницы дальше. Я добрался до холеры, прочел о ее признаках и установил, что у меня холера, что она мучает меня уже несколько месяцев, а я об этом и не подозревал. Мне стало любопытно: чем я еще болен? Я перешел к пляске святого Витта и выяснил, как и следовало ожидать, что ею я тоже страдаю; тут я заинтересовался этим медицинским феноменом и решил разобраться в нем досконально. Я начал прямо по алфавиту. Прочитал об анемии - и убедился, что она у меня есть и что обострение должно наступить недели через две. Брайтовой болезнью, как я с облегчением установил, я страдал лишь в легкой форме, и, будь у меня она одна, я мог бы надеяться прожить еще несколько лет. Воспаление легких оказалось у меня с серьезными осложнениями, а грудная жаба была, судя по всему, врожденной. Так я добросовестно перебрал все буквы алфавита, и единственная болезнь, которой я у себя не обнаружил, была родильная горячка.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399622
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsтеперь они удаленыВыше уже неоднократно было сказано, что ничего удалять нельзя. Тем более нельзя удалить позицию справочника, на которую ссылаются документы первички, это просто не даст сделать правильная настроенная связка ПК-ФК. На позиции справочника может быть навешен атрибут типа "устарело", "не рекомендуется", "запрещено" и т.п.

Не надо пытаться выпутаться из патовой ситуации, надо проектировать так, чтобы туда не попадать.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399966
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хорошо! меняем фразу "теперь они удалены" - на фразу "они скрыты" суть не меняется!
всё равно надо найти прививки 9,10! добавить! и повесить признак что выполнять не надо, ибо были выполнены аналогом.

а запрос
Код: sql
1.
2.
3.
4.
select a.*
from REF_PRIVIVKI a
       inner join REG_PRIVIVKI b on b.PRIV=a.ID
where b.VAC=9



вытянет всю таблицу прививок вместо двух.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399979
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_PisarevskyНе надо пытаться выпутаться из патовой ситуации, надо проектировать так, чтобы туда не попадать.

Спроектировано именно так, как все 10 человек выше и говорили. С самого начала так спроектировано!

Теперь есть ситуация, решение которой никто пока не предложил.
И отмазки типо "у вас болит палец а вам лечат ухо" с моей стороны не катят. потому что старые прививки никуда не денутся! и пациенту будут выводиться именно те которые сделаны! Но выводиться будут в "прочее" а на вопрос почему не выполнена актуальная прививка всё равно надо ответить. Для чего и нужен запрос, по вышеописанным критериям.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399982
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsа запрос
Код: sql
1.
2.
3.
4.
select a.*
from REF_PRIVIVKI a
       inner join REG_PRIVIVKI b on b.PRIV=a.ID
where b.VAC=9



вытянет всю таблицу прививок вместо двух.
Если не осиливаешь как работает запрос, то...
Разложи на 2-3 простых SQL-запрсоса и оформи их в процедуру.
Времени займешь у других меньше на порядок. (Давно бы уже сделал.)
Получишь легко исправляемое и, что важнее, ТЕСТИРУЕМОЕ на правильность решение.

1. ХП - наше фсё!
2. Леворукие криво джоины - зло.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399988
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsСпроектировано именно так, как все 10 человек выше и говорили. С самого начала так спроектировано!

Кем спроектировано?
Я в ентой фигне участия не принимал и смотрел с явным неодобрением.
Другие мемберв - не погружались на 150% в предметную область и формулировали ответы в "общем виде".

- Чё за предъявы?

Магём и помолчать, нам-то оно нафех не упало....
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39399998
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsна вопрос почему не выполнена актуальная прививка всё равно надо ответить.
Sia-Ori1Планы прививок тоже стоило бы добавить, наверное.+1

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

столкнув с планом прививок и прививки конкретного пациента можно получить некую разницу и таки да, сделать это одним запросом может оказаться "многоэтажно", так что см. хранимые процедуры.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39400108
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LIne- Чё за предъявы?


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

Связь многие-ко-многим создается с помощью трех таблиц. Две таблицы – “источника” и одна соединительная таблица. Первичный ключ соединительной таблицы A_B – составной. Она состоит из двух полей, двух внешних ключей, которые ссылаются на первичные ключи таблиц A и B.
Это все, что нужно для создания м-м

или

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

Очень оригинальные советы )).
ХП ближе к делу. И там даже вопросов нет.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39400130
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepalsхорошо! меняем фразу "теперь они удалены" - на фразу "они скрыты" суть не меняется!
всё равно надо найти прививки 9,10! добавить! и повесить признак что выполнять не надо, ибо были выполнены аналогом.

а запрос
Код: sql
1.
2.
3.
4.
select a.*
from REF_PRIVIVKI a
       inner join REG_PRIVIVKI b on b.PRIV=a.ID
where b.VAC=9



вытянет всю таблицу прививок вместо двух.

Хорошо, раз я уже влез, скажи где этот признак "скрыты"? Прямо таблицу скажи и поле.
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39400164
sdepals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да всё тема закрыта, решение перевели в многогранное SP. а поле находится в REF_PRIVIVKI.IS_HIDE не видешь? я тоже не вижу, а оно есть!

и доп условие в запросе, никак на алгоритм и выходные данные не повлияет.
Код: sql
1.
2.
3.
4.
select a.*
from REF_PRIVIVKI a
       inner join REG_PRIVIVKI b on b.PRIV=a.ID
where b.VAC=9 and a.is_hide=0
...
Рейтинг: 0 / 0
как? реализовать связь "много-ко-многим"
    #39400211
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdepals,

Вот это - "a.is_hide=0" сильно.
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как? реализовать связь "много-ко-многим"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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