![]() |
|
Модераторы: LSD |
![]()
|
|
| AlexanIvanov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 10.11.2010 Репутация: нет Всего: нет |
Здравствуйте, уважаемые корифеи! Не удивляйтесь моему вопросу - ответ мне СРОЧНО нужен для дипломного проекта. Я - студент из Киева. Вы или ваши коллеги мне так и не ответили год тому неа этот же вопрос. Думал, разбирусь сам. Но, увы... Прошу ответить сегодня. Я уже поднимал эту тему ранее. Но, опять же - увы... Прошел год, но так вопрос и не проянился - а ситуация очень простая.
Как проектировать схему реляционной БД, если мне нужно моделировать связь между тем или иным значением конкретного атрибута в записи одной таблицы и наименованием сторонней таблицы (или даже именами группы таблиц!). Я так думаю, что такая связь выходит за рамки строгой реляционной модели. Но я никак не могу понять, как тогда моделируется примитивная ситуация, которая возникает во многих ПрО? Попытаюсь ее описать как смогу. Простите мне многословие, если что. Пусть ПрО - это регистратура в большой поликлинике в большом городе. Куча врачей, куча кабинетов, очередь стоит на регистрацию. Понятно, что все потребности больных регистрируются в одну таблицу РЕГИСТРАТУРА (КодПациента, КодВрача, КодДиагноза, …) подряд. В этой таблице сразу же формируется и их очередь в данный кабинет - или на исследования (на рентген, на УЗИ, на сдачу анализов, на ЭКГ и т.п.), или просто на прим к разным врачам (а наименований их - около 20, не говоря уже о структуре таблиц, каждая из которых отвечает за каждого врача). И что же мы имеем в итоге? Как я понял, типовую ситуацию. То, что зарегистрировано в простом списке (потоке) в таблице РЕГИСТРАТУРА(), со ссылками на справочник врачей, исследований, диагнозов и т.п. сущностей, должно строго связываться с разными сторонними таблицами. На руки больной получает сою очередь в конкретный кабинет конкретного врача - номерок. Все знают, что это - как билет на поезд. Тут все линейно и прозрачно. А вот дальше начинается самое интересное. Приложение же должно формировать подготовительные записи в куче формируемых новых таблиц! Если бы это была одна новая сводная (сплошная) таблица, то проблемы бы не было. Но это - 3-4 десятка разных таблиц! То есть, если атрибут КодВрача равен, скажем, 1 (больной пришел и зарегистрировался к простому терапевту), то нужно создать под него запись в таблице ПРИЕМ ТЕРАПЕВТА (), если атрибут КодВрача равен, скажем, 2 (больной пришел и зарегистрировался к кардиологу), то нужно создать под него запись в таблице ПРИЕМ КАРДИОЛОГА (). И так далее. И что ж получается? Получается, что ничем, кроме как наименованием (и само собой структурой-схемой), эти таблицы различить невозможно! Значит, нужно в справочник ВРАЧИ (КодВрача, Имя врача, ИмяСтороннейТаблицы) вносить нереляционную ссылку «имя сторонней таблицы». Потому, что по иному, как мне кажется, эти таблицы взаимодействовать не будут. А без этого - пролет работы приложения. Я уверен, что ситуация, описанная мною - типовая. И даже классическая. Но почему я ни в одном учебнике по РБД не могу найти ответ на этот вопрос? С чем я столкнулся? Что я еще думаю. Можно, конечно же, исходить не из таблицы-списка зарегистрированных больных при создании таблиц-приемов врачей, а наоборот. То есть, при формировании информации в приложении конкретного врача терапевта на его компе, прога может цеплять к открытой (текущей) таблице ПРИЕМ ТЕРАПЕВТА (КодВрача, ) фоновую таблицу РЕГИСТРАТУРА (КодВрача, ...) по конкретному значению атрибута КодВрача, прописанному прямо в листинг приложения. Но, как мне кажется, от этого нереляционность не отпадет - хрен редьки не слаще. А разделять «регистрационную» таблицу стразу же на кучу журналов по именам врачей (как делают, например, в ЗАГСЕ – там та же ситуация, кстати), нельзя ни в коме случае. Потому, что там работают процедуры проверки целостности и непротиворечивости очередей в кабинеты. А это можно сделать только на цельной таблице. Что это за ситуация? Где она описана, в каком учебнике? И как такое моделируют профессионалы по проектированию схем реляционных БД? Потому, что таких ПрО можно привести сотни в пример. Да, и прошу меня извинить, если совершенно аналогичный вопрос вы обнаружите на других форумах по БД. У меня горит диплом! Словом, помогите!!! |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Никак. Желаемое вами не описывается реляционной моделью. Я не совсем понял таблицы "Прием терапевта" и "прием кардиолога" имеют разный набор аттрибутов? Если нет, то смысла их разделять нет. Если да, то смысл их разделять есть и в какую таблицу необходимо совершить запись должен знать прикладной слой(rtfm Трёхуровневая архитектура). Именно он реализует логику. База данных лишь определяет структуру даных и контроллирует целостность. Соответственно при добавлении новых типов приема, если они не вписываются в общую структуру, требуется модификация не только схемы данных, но и прикладного слоя Не помечайте свой вопрос как "Срочный", даже если для вас он именно такой -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 10 Всего: 54 |
+1 А если разный, но с базовым стержнем, то в ОСУБД для таких случаев предусмотрено наследование. Но для моего сознания оно чужно, я бы предпочел "разрулить" вводом дополнительного атрибута "ТипПриема", и плевать, что при этом таблица примет вид разреженной матрицы. Добавлено через 2 минуты и 23 секунды
Сходил по ссылке - ничего не понял... Про каких-то хакеров... Пушистых тюленят... -------------------- Слава Україні! |
||||
|
|||||
| Zloxa |
|
||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
я часто применяю такой подход псевдо DDL:
Жаль подход не гарантирует что связь будет строго 1:1, зато не допускает не однозначности, за счет FK, у нас не может быть два расширенных набора атрибутов Это сообщение отредактировал(а) Zloxa - 1.8.2012, 02:07 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||
|
|||||
| AlexanIvanov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 10.11.2010 Репутация: нет Всего: нет |
Спасибо большое за ответы. Но я так и не понял главного - как такое можно моделировать в рамках РБД? Вы сказали "никак". А если честно? Я что - тот самый "маленький дилетант", который вдруг выкрикнул, что король голый? Неужели такую прорву ПрО реляционка не тянет? Подскажите, плиз, в каком учебнике описаны эти ситуации? Ведь совершенно очевидно, что ситуация потому и возникает, что ПрО - большая. И что атрибуты во всех разных таблицах в большинстве - разные.
Вы правильно подметил, что терть таблиц - схожая (ключи одинаковые), а осталное - разное. У кардиологов - свое, у терапевтов - свое, в кабнете УЗИ – и подавно свое. Но оплачивается все это из одних рук, через одну кассу и посредством одной регистратуры. Такая же ситуация будет в ЗАГСЕ. То же самое будет и в ателье, которое одновременно предоставляет услуги и по уходу за болными, и по репетиторству детей, и по починке автомобилей, и по … То же самое и на кассе суппермаркета, где мы покупаем одноврпеменно и коло колбасы, и холодильник, и палатку с шашлычницей, и удочки, и канцелярские скрепки, и бутылку водки, и гвозди с отверткой, и еще прорву разного. Да сотни таких ПрО! Ну и что нового я вам рассказал? Ровным счето - НИЧЕГО!!! Так почему же этого нельзя моделировать в РМБ? Что крамольного в том, что куча таблиц запрашивается из одной таблицы по разным значениям атрибута? А если Э. Кодд это запретил, то как он это предлгает делать? Должны же быть альтернатива! Очень проршу - подскажите точнее - где я могу почитать о таком? И как там рекомендуется такое моделировать в РМД? Добавлено через 5 минут и 14 секунд "... я бы предпочел "разрулить" вводом дополнительного атрибута "ТипПриема", и плевать, что при этом таблица примет вид разреженной матрицы." Не-не! Так точно будет очень плохо! Вот так - это неверно не только для РМД, но и для просто здравого смысла - дикая избыточность. Это - не альтернатива. Должно быть что о иное... Добавлено через 10 минут и 39 секунд "я часто применяю такой подход псевдо DDL" Уважаемый корифей! Мы уже с вами пытались общаться в прошлом году. Вы тогда отказались рисовать квадратики. Дело в том, что я плохой программмист. Я проектировщик схем - "квадратиков". А можно ли просто расказать на уровне идей? Простым русским языком, заменяя таблицы именами как предикатами? Мне просто сложно понять в вашем листиге главное - как вы избегаете этой связи? На мой взгляд, даже введением новой или еще одной хелп-таблицы разрвать эту связь невозможно. Потому, что некая сводная таблица заказов рассечена самой жизнью на слои. А вы как это обходите? |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 10 Всего: 54 |
Примените EAV . Ну как не вопрос по составлению запросто - то обязательно "... что бы выполнялось за один запрос", а если вопрос по проектированию, то "... что бы вся логика выполнялась на SQL-сервере". На императивном языке динамически составляйте запросы к БД или динамически формируйте параметры к хранимым процедурам - это должно помочь... Тогда предлагаю начать с формального описания задания (так сказать ТЗ). И проектирования БД на концептуальном уровне. -------------------- Слава Україні! |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
В РМД такое не рекомендуется моделировать РМД предназначена для другого Потому что тогда она перестанет быть РМД Мы сказали очень честно. На реляционную базу это не натянуть. Может какая не реляционная может, но вы настойчиво циклитесь именно на реляционной. Вы так употребляете термин, будто он широко употребим. Я с этим термином не знаком. Не припомню, но то не суть. Мой пост был обращен не вам. Я бы не рекомендовал исползовать EAV человеку, который врядли сможет оценить риски ее применения и сопоставить с целесообразностью. Больно уж она по душе приходится неокрепшим мозгам.
ппкс Это сообщение отредактировал(а) Zloxa - 1.8.2012, 17:09 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Однако, все же, через это надо пройти. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| AlexanIvanov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 10.11.2010 Репутация: нет Всего: нет |
Да просто на этом же форуме я поднимал этот ж вопрос год тому для бакалаврского диплома. Его же можно запросто найти по моему нику. Вы тогда тодже ответили мне листингом. Но я попросил расшифровать ответ. А вы сказали, что квадратики рисовать не будете.
А вообще то вы мне уже очень помогли. Но если бы еще нашлась и ссылка на какой то учебник, в которм было бы написано, что РМД не может моделировать такие ситауции, то я смог бы спокойно вписать это в диплом. Но теперь возникает уже вопрос принципа. Если мощная РМД не может моделировать такую пустяковую ситуацию, то в чем причина? Ведь в теории множеств, да и в любой алгебре, не составляет проблем проводить операции по соответствию между элементом одного множества и его связью с именем иных множетств. Что тут нового? Имя множества - это такой же нормальный операнд любой алгебры, как и любой его элемент. Кто конретно запрещает ставить соответствие емежду данными и метаданными на уровень данных (то есть вносить ссылки на метаданные в таблицы данных)? Э. Кодд? А как он тогда предлагает моделировать такие ситуации? Ведь это - типовая ситуация. Повторюсь - таких предметных областей (ПрО) - сотни! УМОЛЯЮ - не отписывайтиесь листингами! Мне правда нужна помощь!!! Листингом тут не отделаешься. Меня ведь допрашивать будут с пристрастием. Парой слов не отделаться... Подскажите пожалуйста, вы встречались с такими ситуациями? Они где то описаны? Извините мне мое занудство.. Добавлено через 3 минуты и 7 секунд Ну то есть речь идет не о прогркаммном решении (я ведь уже описал одно из них), а о схеме реляционной БД! В это же и смысл проектирования БД - моего диплома. Знанием языков и программированием сейчас никого не удивишь. А мой диплом - это проект схемы РБД большущей ПрО. Вот в чем вопрос... |
|||
|
||||
| Zloxa |
|
||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Вобщета - никто. Используйте нереляционные базы и будьте счастливы. Если очень хочется, можно даже реляционную базу попробовать использовать как нереляционную. Хранить данные в XML или JSON и баста. У оракла, слышал, есть какието средства в XMLDB, позволяющие идексировать хранимые XML, формировать запросы. В реляционных же базах изменение структуры данных всегда влечет за собой изменение логики работы с ними, изменение экранных форм, отчетов и пр, пр. Все ранее написанные запросы к данным, хранимые процедуры требуют ревалидации, перекомпиляции, которое могут требовать монопольного доступа к метаданным. В нагруженной многопользовательской среде это будет проиводить к взаимным блокировкам и может остановить всю систему полностью. Для реляционной базы изменение структуры данных это очень серьезная операция.
Чем я могу помочь? Пересадить вам свой головной мозг? Это сообщение отредактировал(а) Zloxa - 2.8.2012, 03:37 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||
|
|||||
| AlexanIvanov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 10.11.2010 Репутация: нет Всего: нет |
А нельзя ли протсо ссылку нак статьи на эту или близкую тему? Скажем, нет ли статей на тему "проколы РМД", или "Перечень проблем, которые невозможно моделировать в РМД", или "Предметные области, которые не моделируются классической РМД". Что то в этомроде.
Я может протсо неверно вопросы задаю. Но меня для дипломного проекта вообще не интересет программирование. И я лично, и уж тем более мои преопдыв знают, что накодировать (наваять) можно все что угодно. Поэтому этот вопорос касался не программированя БД как такового, а практики проектирования схем реляционных БД. Именно проектирования. И именно схем! А уже как кодировать приложения - это вопрос десятый. И по поводу никто не запрещает. Преподы мои в КПИ сильно запрещают. Выход за рамки РМД должен быть строго обоснован. И лучше, если это будети статья какого то американца. Я их уже сотню прочитал. Не говоря уже о всех классических учебниках. Нол информации на эту тему! Вот в чем опрос то... ПОМОГИТЕ подсказкой публикаций! |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Третья ссыль выдачи гугла по "нереляционные базы данных" статья на хабре - перевод статьи англоязычного автора. Вроде там есть какой-никакой анализ проблем реляционных баз, обосновывающий применение не реляционных. Беглым взглядом на статью откровенной чуши не увидал, вроде похожа на правду.
Только те проблемы, которые вы описываете в топикстарте там не упомянуты. Потому что это не проблемы реляционной модели. Это проблемы вашего ее не понимания. Навевает пикчу: ![]() Не могли бы вы ве же попытаться объяснить, что именно вас не устраивает в схеме, когда данные, собранные при осмотре разных специалистов сохранялись бы в разных структурах данных. Это вполне нормлаьная практика. Совершенно не понятно, что вызывает у вас недоумения и зачем вам связь данных с метаданными. Это сообщение отредактировал(а) Zloxa - 2.8.2012, 13:15 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| AlexanIvanov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 10.11.2010 Репутация: нет Всего: нет |
Хорошо. Пусть я тупой студент. Нет проблем.
Тогда давайте просто порассуждаем. Пусть мы хотим скрестить ужа с ежом - делаем сводную таблицу-монстера. Хотя она будет слабозаполненной. Решетом, как метско сказал один из собеседников на другом форуме. Пусть в эту таблицу-решето ежеминутно входит информация обо всех-всех услугах, предоставляемые такой поликлиникой-ателье. И УЗИ, и вырывание зубов, и ЭКГ, и прием всех врачей, и езе куча-куча.... Тогда такое огромедное решето будет же очень медленно работать, если таких клиентов к нему - пару сотен врачей одновременно! Это - раз. А второе - получается все та же нереляцоинная ссылка, что и в моем описании. Только она замаскирована в листинге запроса. Какая же разница, а? Ведь все равно же при загрузке приложения на рабочем месте скажем УЗИста процедура запроса в соответствии с значением кода услуги из справочника ИССЛЕДОВАНИЯ (КодУслуги, ...), скажем, 15 - УЗИ, врач-узист получает доступ к отфильтрованному решету. Ему то ведь сто лет в обед не нужно трогать записи в решете об посещении терапевтов, кардиологов и т.п. Что же получается? Та же нереляционная ссылка. То же самое взаимодействие данных и метаданных. Только не в явном виде прямо в справочнике, а замаскировано в листинге хранимой "на века вечные" процедуры запроса. Так что никуда от такого фильтра не деться. Хоть в лоб, хоть по лбу. Ведь так? Поэтому прошу не отвлекаться от вопроса нереляционной ссылки. Она обязательно имеет место. Прошу просто подсказать, где такое описано, если вообще описано... Сейчас, после 3 дней дискуссии в 6 основных форумах, я в этом сильно засомневался... Кстати, спасибо за ссылку на статью о конце РБД. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Ссылка как раз таки очень реляционная. А разница в том, что решето вписывается в реляционную модель и реализуемо, а ваше описание сферическое и в вакууме. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| AlexanIvanov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 10.11.2010 Репутация: нет Всего: нет |
Я решил свою проблему.
Описанный мною процесс - это действительно классика. Только назван он денормализацией. И ни о каком выходе за пределы РМД речь не идет. http://www.lcard.ru/~nail/sybase/perf/1088.htm "Как правило, горизонтальное разделение ... требует различные имена таблиц в запросах, в зависимости от значений в таблице" Я надеюсь, статья от Сайбес ни у кого не вызовет недоверия? Оказалось, что таких статей в инете - куча. Но помощь эту я получил не от форумов России. Везде одна и та же картина. Жаль, что корифеи оказались столь не начитанными... Словом, всем спасибо... Все мне очень помогли ... зарядом злости, который дал возможность прогнуться перед преподом "соседнего" ВУЗа, дать ему коньяк и просто по детски спросить, где такое может быть? Но при этом показать ему (посредством этих форумов), что узнать у коллег хоть что то серьезное и нестандартное практически невозможно! Но тогда, в чем смысл таких форумов, а? В забалтывании проблемы?... Очень всем спасибо за науку о форумах... |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |