|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
Доброго время суток! что-то нет не малейшего представления как это сделать, подскажите хоть область математики? которая таким занимается)) имеем: таблица 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 все остальные записи с другими не стыкуются. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 11:39 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepals, Какой-то поток сознания. Откуда взялись "табличные части" и где они в описании "имеем"? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 11:43 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
пытался думать в сторону регулярок но .. думал вот сюда =): 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) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 11:47 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
ну ладно, поток сознания чтоб в предметную область не вникать. есть прививки Дифтерия-Коклюш-Столбняк, Дифтерия-Столбняк, Дифтерия, Коклюш, Столбняк и отдельно Гепатит B Полиомиелит. есть куча вакцин, с помощью которых они могут быть выполнены. можно 1 вакциной выполнить как все 5 так и 4 так и 3 так и 2 так и 1 прививку, задача, зная вакцину, отметить человеку выполнение прививок. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 11:52 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
Это называется связь "много-ко-многим", традиционно реализуется через 2 таблицы сущностей и таблицу связей. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 12:51 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepals, насколько я помню, связи M-M физически не существует, она реализуется через 1-M - M-1. То есть, даже если case-инструмент позволяет сделать такую связь, при генерировании физической модели он создаст промежуточную таблицу. Например, есть заказы, и есть товары. В одном заказе может быть несколько товаров, и один товар может продаваться в разных заказах. Здесь заказы к товарам это M-M. Но придется создавать промежуточную таблицу "продажи" (или любое другое название), в которой 2 столбца (ПК) - код товара и код заказа. тогда заказы 1 к продажи М, продажи М к товарам 1 Что и обеспечивает конечную связь M-M. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 12:57 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
Через 3 таблицу м-м реализуется. Вот только есть ощущение, что автору не нужно м-м. Но можно сделать для этого случая какой-нибудь хэш. Вакцина1 2.3.4. Вакцина2 1.2.3. Вакцина3 4.5.6. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:05 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
мда согласен... но это пол дела, мне надо исключить из "много-ко-многим" записи в которых есть "пересечения" т.е. имея вакцину АКДС(коклюш,дифтерия,столбняк) - я должен достать только запись из таблицы прививок КДС! Записи ДС,К,Д,С - не удовлетворяют условию. Вопрос как такое условие написать? Более того я вполне понимаю, что возможно неправильно проектирую БД, и сейчас у меня именно так как Вы и описали. Сущность Прививки, сущность вакцины, и регистр(он же табличная часть) для таблицы прививки, где указываю какими вакцинами она может быть выполнена. Но сейчас склоняюсь в сторону того что у сущностей прививки и вакцины должны быть регистры "диагнозов(болезней)", и зная их определять соответствие. Диагнозы точно нужны для других целей отчётности, и я как раз таким образом пытаюсь избавиться от "традиционной таблицы связей" считая её избыточной, даже не для хранения, а для ввода данных пользователем. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:09 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
После долгих бесед с врачами и вникания в предметную область .... подумал что должна быть связь 1-М, 1 человек много прививок, и вся отчётность работает с прививками! но спустя некоторое время сообразил, врач вводит вакцину 1 раз, е ему надо проставить её в 3 прививки(врач видит список прививок). Сейчас пришел к тому что врач должен вводить вакцины! а в мой регистр 1-М(1 человек много прививок) - должны добавляться прививки для отчётности. НО! внося прививку КДС, я хочу добавить 1 запись, а не все 5 подходящих, если вязать много ко многим. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:18 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepalsя хочу добавить 1 запись, а не все 5 подходящих Тогда тебе следует различать сущности "прививки" и "привитые болезни". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:30 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
Кстати я же говорю так как вы предлагаете так есть сейчас! т.е. есть 3 таблица в которой связаны прививки вакцины, но почему мне это не нравится, предположим у меня есть вакцина КДС, а у пациенту надо сделать прививку ДС! а после этого через год, ему придумают какой нибудь коклюш+гепатит, - и эта прививка ему не выполнена, так как выполнен только коклюш. т.е. в регистре пациент+прививка, я увижу только ДС, и если я буду искать К, я его не найду! т.е. я думаю свести к атомарным записям надежней, чем меняющийся состав прививок.... П.С. хотя на сколько я понимаю ситуация описанная в данном сообщении практически исключена, прививки либо не меняются либо не чаще чем раз в 10 лет, вакцины появляются чаще. Но делаю сейчас то что делаю исходя из соображений "атомарности", хочу знать что выполнено по факту, откуда подберу, то что хочет врач. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:34 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovsdepalsя хочу добавить 1 запись, а не все 5 подходящих Тогда тебе следует различать сущности "прививки" и "привитые болезни". - так вот я и хочу же, от прививок уйти к привитым болезням. хотя врачу нужны именно прививки а не привитые болезни. Но отображение дело второе, там вопросов нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:37 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
как редактировать сообщение?) точней я хочу хранить привитые болезни, но пользователю нужно отображать прививки ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:39 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepalsкак редактировать сообщение?) Ни как. sdepalsточней я хочу хранить привитые болезни, но пользователю нужно отображать прививки А что, со временем одна и та же вакцина может применяться против большего числа болезней? 1. Если НЕТ, то название вакцины "скажет" (её ID) от чего она. 2. Если ДА, то почему бы ей не стать "новой вакциной" в табличке "Вакцины". Тогда ни чего переделывать в будущем не придется. И всё вернется к п.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:47 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepals, Делай как в жизни, это самое правильное. Первая Таблица - это вакцины, Вторая таблица - это прививки, Третья таблица - это связующая между вакцинами и прививками. Например, запись в первой "АКДС" должна иметь трёх детей в связующей таблице, котрые имеют связь с прививками. Чтобы найти какую вакцину нужно применить для определённых прививок, нужен запрос по промежуточной (связующей) таблице. Но это уже дело второе. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:03 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepalsточней я хочу хранить привитые болезни, но пользователю нужно отображать прививки А что, со временем одна и та же вакцина может применяться против большего числа болезней? 1. Если НЕТ, то название вакцины "скажет" (её ID) от чего она. 2. Если ДА, то почему бы ей не стать "новой вакциной" в табличке "Вакцины". Тогда ни чего переделывать в будущем не придется. И всё вернется к п.1[/quot] Немного не так. Вакцина и кол-во болезней ей привитых не изменится! А вот в прививках которыми "оперируют" врачи, я не уверен. Не исключено, что врач 2 пациентам введет вакцину КДС, но попросит одному отобразить ее как КДС, а другому как ДС+К а ID вакцины скажет мне что ей можно выполнить прививки КДС,ДС,К,Д,С - 5 штук. а отобразить надо только ту где совпало максимальное кол-во диагнозов - КДС. Есть еще Корь,Краснуха,Паротит - которая бьется также, но вроде не видел вакцин пересекающихся между ККП и чем то другим. П.С. но хоть прививки новые и не появляются, новые вакцины штампуют постоянно, и сейчас норма по 3 прививки одной вакциной делать, но уже есть всякие пентаксим - от слова пять, Инфанриксы - Гекса - от слова 6. И вполне возможно со временем будет нормой не тройная а четверная прививка. Есть такая штука календарь вакцинации - стандарт! И там планируют когда чего колоть, сейчас КДС - это одна строчка, а если что-то изменится, то как то не хочется, десяткам клиентов перебивать регистр М-М прививка-вакцина. А вот в случае атомарных болезней ситуация выглядит лучше. Так что всё еще думаю, что от М-М прививка-вакцина, надо избавиться, и как то запросом доставать данные из схемы 1-М:М-1 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:13 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
KreatorXXIsdepals, Третья таблица - это связующая между вакцинами и прививками. Например, запись в первой "АКДС" должна иметь трёх детей в связующей таблице, котрые имеют связь с прививками. Сейчас именно так и есть: для одной вакцины КДС, в связующей таблице 5 записей КДС,ДС,К,Д,С. Банально удалив из этой таблицы связи вакцины КДС и прививок ДС,К,Д,С - задача будет решена. И я вижу что вы все клоните к этому сценарию )) просто мне кажется что нужно 1-М:М-1. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:22 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepalsНе исключено, что врач 2 пациентам введет вакцину КДС, но попросит одному отобразить ее как КДС, а другому как ДС+К Должно быть отмечено ID примененной вакцины. И пофех кто, как и в куда там махинирует называет ее. Тогда всегда можно построить связь Вакцина - Болезнь, было или нет, кому, когда и сколько. А то колют экс_кулапы по 5 раз ДифТирит против Ветрянки. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:25 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
Вообщем в частности из ответа kdv, я понял останавливаюсь на таблице связке вакцина прививка, хорошо! Тогда другой вопрос: имеем таблицу связь вакцина-прививка, и таблицу связь пациент - прививка. И даже в независимости от этого денормализовано храню отдельную таблицу пациент-вакцина. Дальше случается нечто. и в таблице вакцина-прививка, имеющей записи КДС и гепатит, обе эти записи удаляют, и добавляют две новые КД и СГ ? Что делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:34 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
Понятно вы все утверждаете, и мои первые рассуждения, что правильно сделать таблицу связь вакцина-прививка. но вот постом выше описанные действия вводят в тупик! удаляем 3-1 из таблицы связь вакцина-прививка, и меняем на 2-2, и чтоб восстановить данные, зная выполненные прививки, придется сделать нечто, реализующее то что я спросил в первом сообщении. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:41 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepals, запрети удалять, а апдейты протоколируй. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:47 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepalsдействия вводят в тупик!Не извивайся ужом и не при против науки. проектируй по букварю типичную связь MxM и запросы станут тривиальными и читаемыми, а не для sql-ex. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:49 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepalsДальше случается нечто. и в таблице вакцина-прививка, имеющей записи КДС и гепатит, обе эти записи удаляют, и добавляют две новые КД и СГ ? Что делать? А кто сказал удаляют физически? Если врач не видит старую (снятую) вакцину в списке - она для него "удалена"? Значит нужно еще поле "ACT" = 1 активна вакцина, = 0 - ее не показываем персоналу в списке. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:49 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepalsKreatorXXIsdepals, Третья таблица - это связующая между вакцинами и прививками. Например, запись в первой "АКДС" должна иметь трёх детей в связующей таблице, котрые имеют связь с прививками. Сейчас именно так и есть: для одной вакцины КДС, в связующей таблице 5 записей КДС,ДС,К,Д,С. Банально удалив из этой таблицы связи вакцины КДС и прививок ДС,К,Д,С - задача будет решена. И я вижу что вы все клоните к этому сценарию )) просто мне кажется что нужно 1-М:М-1. Не так. В связующей таблице должно быть три записи, а не пять (к, Д, С). Напиши примерную структуру таблиц "Вакцины" и "Прививки". Связующую нарисую. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:56 |
|
как? реализовать связь "много-ко-многим"
|
|||
---|---|---|---|
#18+
sdepalsимеющей записи КДС и гепатит, обе эти записи удаляют, и добавляют две новые КД и СГ ? Что делать? я в этой предметной записи не разбираюсь, но выглядит это как "пациенту удалили аппендицит. А потом вдруг оказалось, что почку". но мне кажется, что у вас проблема с определением сущностей и их связей. sdepalsт.е. имея вакцину АКДС(коклюш,дифтерия,столбняк) - я должен достать только запись из таблицы прививок КДС! Записи ДС,К,Д,С - не удовлетворяют условию. Вопрос как такое условие написать? АКДС - это ОДНА прививка, как я понял, а не 4 (или 3). Другое дело, что такая прививка состоит из частей. 1 человек - много прививок 1 прививка - 1 вакцина? несколько? 1 вакцина - несколько заболеваний. Верно? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:58 |
|
|
start [/forum/topic.php?desktop=1&fid=40&tid=1561724]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
97ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 513ms |
total: | 720ms |
0 / 0 |