powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как? реализовать связь "много-ко-многим"
25 сообщений из 53, страница 2 из 3
как? реализовать связь "много-ко-многим"
    #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
25 сообщений из 53, страница 2 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как? реализовать связь "много-ко-многим"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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