powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как связать две таблицы?
21 сообщений из 21, страница 1 из 1
Как связать две таблицы?
    #38038335
7feet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Помогите, пожалуйста, разобраться. Проблема, вроде бы, ерундовая, но решить не получается.

Есть участковые врачи и участки. Каждый участковый врач обслуживает только один участок. Каждый участок обслуживается только одним врачом. Каждый участок характеризуется перечнем улиц с указанием домов.

Я получил две сущности: "Участковый" и "Участок", и теперь не понимаю, как их можно соединить, ведь атрибут "Номер_участка" не ключевой в обеих сущностях.

Были такие мысли:

1) В сущности "Участковый" сделать "Номер_участка" первичным ключом. Не получается из-за того, что "Участковый" является подтипом сущности "Врач".

2) В сущности "Участок" атрибут "Номер_участка" заменить атрибутом "Табельный_номер"; но в этом случае возникнет аномалия удаления данных (удаляя из таблицы "Участковый" записи о врачах, теряем информацию о номерах участков).

3) Слить две сущности в одну сущность "Участковый"; этот вариант тоже не кажется мне верным.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038344
7feet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Картинка не подцепилась.

Сущности такие:
Участковый (Табельный_номер (FK), Номер_участка)
Участок (Улица (PK), Дом (PK), Номер_участка)
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038488
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
7feetЯ получил две сущности: "Участковый" и "Участок"
"Участок" состоит из адресов. Будет 3 таблицы
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038606
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7feetЯ получил две сущности: "Участковый" и "Участок", и теперь не понимаю, как их можно соединить,
Можно по-разному. Самое простое - протянуть внешний ключ от участкового к участку и навесить на него ограничение уникальности. Ну а что до самого правильного... для этого надо смотреть постановку задачи. Мой хрустальный шар говорит, что для сферической курсовой в вакууме она ни фига не поставлена и её надо придумывать самому. Как нормально придумать... я бы принял во внимание тот простой факт, что схема изначально неверна. Подтипом сущности "врач" является не "участковый", а "терапевт". Терапевт может быть участковым (а может и не быть - например, он может быть завотделением). То есть "участковый" - это не сущность, а развязка между "участками" и "терапевтами". В общем случае - если понимать, что терапевты болеют и ходят в отпуск, и их замещают другие терапевты, переходят на другой участок итп - развязка многие ко многим с указанием периода дат.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038629
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если совсем просто:

doctor (...)
sector (...)
sector_structure (sector_id, street_id, ... )
local_doctor (doctor_id, sector_id, ...)

Вообще, вам штатное расписание нужно, график дежурств, замещения и пр., - тогда все будет по-взрослому.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038727
7feet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerСамое простое - протянуть внешний ключ от участкового к участку и навесить на него ограничение уникальности.
Если не ошибаюсь, в этом случае получится нарушение третьей нормальной формы (возникнет зависимость между неключевыми атрибутами "Номер_участка" и "Табельный_номер").

softwarerПодтипом сущности "врач" является не "участковый", а "терапевт".
Изначально сказано, что врач может быть либо участковым, либо специалистом.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038767
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7feet(возникнет зависимость между неключевыми атрибутами "Номер_участка" и "Табельный_номер").
И давно у вас табельный номер - неключевой атрибут?

7feetИзначально сказано, что врач может быть либо участковым, либо специалистом.
(терпеливо) Участковый - это просто общеупотребимое сокращение от "участковый терапевт" (как и от "участковый милиционер"). В детских поликлиниках аналогично будет "участковый педиатр", раньше было понятие "участковая медсестра" (ходили по домам, делали уколы и другие процедуры больным). Вам нужно понять взаимосвязь этих понятий, понять, что есть иерархия специализаций, а привязка к участку - атрибут некоторых типов специалистов.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038823
7feet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerИ давно у вас табельный номер - неключевой атрибут?
Я, конечно, в базах данных не силен, но разве связь "Участковый" --> "Участок" - идентифицирующая? По-моему, нет. Тогда табельный номер - неключевой атрибут для сущности "Участок".

softwarer(терпеливо) Участковый - это просто общеупотребимое сокращение от "участковый терапевт" (как и от "участковый милиционер").
Вы серьезно считаете, что я не знаю значения слова "участковый", или издеваетесь? "Иерархия специализаций" - это нагородить огород, чего делать никто не просит. И даже если построить эту иерархию, внизу окажется тот самый "Участковый", которого нужно связать с таблицей "Участки".

Вопрос, ответ на который я хотел бы получить, задан в первом посте. Есть две таблицы, возможно ли в принципе их связать, не нарушив при этом ссылочную целостность, третью нормальную форму и не создав аномалий?
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038829
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7feetЯ, конечно, в базах данных не силен, но разве связь "Участковый" --> "Участок" - идентифицирующая? По-моему, нет. Тогда табельный номер - неключевой атрибут для сущности "Участок".
Это вообще не атрибут сущности "участок". Ему совершенно нечего там делать. Но если Вы рассматриваете ключ в эту сторону, возникает аналогичный вопрос: с каких это пор "номер участка" не является ключевым атрибутом сущности "участок"?

7feetВы серьезно считаете, что я не знаю значения слова "участковый", или издеваетесь?
Я считаю, что у Вас проблема на концептуальном уровне из-за попытки стянуть в одну иерархию (типов-подтипов) разнородные понятия, и эта проблема приводит к обоснованным сомнениям "как проектировать таблицы". Как только Вы начнёте мыслить в правильных терминах, ответ станет очевидным, а до тех пор.. удачи.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038857
7feet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerЭто вообще не атрибут сущности "участок". Ему совершенно нечего там делать.
Тогда что означает ваша фраза "протянуть внешний ключ от участкового к участку", если не связь "Участковый" --> "Участок", при которой атрибут "Табельный_номер" автоматически попадает в сущность "Участок"?

softwarerс каких это пор "номер участка" не является ключевым атрибутом сущности "участок"?
По определению "Потенциальный ключ - подмножество атрибутов отношения, удовлетворяющее требованиям уникальности и минимальности (несократимости)".
Если "номер участка" - потенциальный ключ, то он не может повторяться, а значит, нельзя указать для участка несколько домов/улиц. В то же время ключ "Улица+Дом+Номер_участка" противоречит требованию минимальности.
Поправьте, если я не прав.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038904
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7feet,
Вы хорошо понимаете кто такой Врач? И Вы действительно полагаете, что Врач "обслуживает участок"? Как дворник? Или это просто курсовая работа студенческая?
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038913
7feet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БредятинаИли это просто курсовая работа студенческая?
Разумеется, это контрольная работа.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038914
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7feetТогда что означает ваша фраза "протянуть внешний ключ от участкового к участку",
alter table doctor add foreign key ...

7feetЕсли "номер участка" - потенциальный ключ, то он не может повторяться, а значит, нельзя указать для участка несколько домов/улиц.
Правда, нельзя? Может ещё раз подумаете? Контрольный вопрос: представьте себе, что участок имеет название и посмотрите на свою схему с учётом этого требования.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038925
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7feet1) В сущности "Участковый" сделать "Номер_участка" первичным ключом. Не получается из-за того, что "Участковый" является подтипом сущности "Врач".
.
И потому возможны несколько экземпляров этой сущности с одинаковым значением "Номер_участка"?
Ить "Каждый участок обслуживается только одним врачом".
Как то обстоятельство, что это подтип "Врач" приведет к нескольким разным сущностям с одинаковым "Номер_участка"?
Может Вы не все договариваете про свои задумки?
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038936
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7feetБредятинаИли это просто курсовая работа студенческая?
Разумеется, это контрольная работа.
Но это же не повод делать заведомые глупости:) Объясните своему преподавателю, что врачи не обслуживают участки:) Концепция "участка" вообще никакого смысла не имеет, поэтому у Вас и возникают проблемы на ровном месте. Если же Вы хотите непременно, чтобы врачи обслуживали участки, то Вам уже не один раз (несколько человек) написали что нужно сделать, но Вы все проигнорировали.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038960
7feet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfoИ потому возможны несколько экземпляров этой сущности с одинаковым значением "Номер_участка"?
Чтобы одному врачу соответствовал один участок, я планировал на "Номер_участка" constraint повесить...

БредятинаВам уже не один раз (несколько человек) написали что нужно сделать, но Вы все проигнорировали.
Там во втором посте картинка, сделанная в Erwin... Команда SELECT изучена до раздела WHERE. Какие тут "alter table doctor add foreign key ..."? Побойтесь бога. Нужно линию нарисовать...
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38038966
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7feetЧтобы одному врачу соответствовал один участок, я планировал на "Номер_участка" constraint повесить...
...
Ну это как бы не проясняет - "сделать первичным ключем" - это тоже означет "constraint повесить".
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38039011
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7feetТам во втором посте картинка, сделанная в Erwin... Команда SELECT изучена до раздела WHERE. Какие тут "alter table doctor add foreign key ..."? Побойтесь бога. Нужно линию нарисовать...
Вот именно. И продолжаете уверенно игнорировать. Зачем тогда было спрашивать:)
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38039374
7feet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, разобрался.
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38040270
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerИ давно у вас табельный номер - неключевой атрибут?

Лично внедрял Зарплату в организации, где было Правило: временным (сезонным, и на испытательном сроке) работникам присваивается свободный табельный номер свыше 1000. Среди временных текучка - сегодня 1971-й ушел, завтра 1972-й пришел. Если же работник оправдал надежды, и переводится в постоянный состав, ему присваивается "привилегированный" табельный номер 0...999.

Но при переводе в постоянный состав все остатки и хвосты за лицевым счетом должны сохраниться...

Вот так я и понял: ключ - это суррогатный ключ. А все, что показываем пользователю - так, реквизиты....
...
Рейтинг: 0 / 0
Как связать две таблицы?
    #38040288
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherВот так я и понял: ключ - это суррогатный ключ.
Это бесспорно. Но я не собирался долго и мучительно объяснять топикстартеру ещё и это, особенно учитывая, что у его преподавателя могут быть произвольные тараканы на этот счёт.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как связать две таблицы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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