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


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