|
|
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Помогите, пожалуйста, разобраться. Проблема, вроде бы, ерундовая, но решить не получается. Есть участковые врачи и участки. Каждый участковый врач обслуживает только один участок. Каждый участок обслуживается только одним врачом. Каждый участок характеризуется перечнем улиц с указанием домов. Я получил две сущности: "Участковый" и "Участок", и теперь не понимаю, как их можно соединить, ведь атрибут "Номер_участка" не ключевой в обеих сущностях. Были такие мысли: 1) В сущности "Участковый" сделать "Номер_участка" первичным ключом. Не получается из-за того, что "Участковый" является подтипом сущности "Врач". 2) В сущности "Участок" атрибут "Номер_участка" заменить атрибутом "Табельный_номер"; но в этом случае возникнет аномалия удаления данных (удаляя из таблицы "Участковый" записи о врачах, теряем информацию о номерах участков). 3) Слить две сущности в одну сущность "Участковый"; этот вариант тоже не кажется мне верным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 16:25 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
Картинка не подцепилась. Сущности такие: Участковый (Табельный_номер (FK), Номер_участка) Участок (Улица (PK), Дом (PK), Номер_участка) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 16:30 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
7feetЯ получил две сущности: "Участковый" и "Участок" "Участок" состоит из адресов. Будет 3 таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 17:34 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
7feetЯ получил две сущности: "Участковый" и "Участок", и теперь не понимаю, как их можно соединить, Можно по-разному. Самое простое - протянуть внешний ключ от участкового к участку и навесить на него ограничение уникальности. Ну а что до самого правильного... для этого надо смотреть постановку задачи. Мой хрустальный шар говорит, что для сферической курсовой в вакууме она ни фига не поставлена и её надо придумывать самому. Как нормально придумать... я бы принял во внимание тот простой факт, что схема изначально неверна. Подтипом сущности "врач" является не "участковый", а "терапевт". Терапевт может быть участковым (а может и не быть - например, он может быть завотделением). То есть "участковый" - это не сущность, а развязка между "участками" и "терапевтами". В общем случае - если понимать, что терапевты болеют и ходят в отпуск, и их замещают другие терапевты, переходят на другой участок итп - развязка многие ко многим с указанием периода дат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 18:36 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
Если совсем просто: doctor (...) sector (...) sector_structure (sector_id, street_id, ... ) local_doctor (doctor_id, sector_id, ...) Вообще, вам штатное расписание нужно, график дежурств, замещения и пр., - тогда все будет по-взрослому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 18:52 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
softwarerСамое простое - протянуть внешний ключ от участкового к участку и навесить на него ограничение уникальности. Если не ошибаюсь, в этом случае получится нарушение третьей нормальной формы (возникнет зависимость между неключевыми атрибутами "Номер_участка" и "Табельный_номер"). softwarerПодтипом сущности "врач" является не "участковый", а "терапевт". Изначально сказано, что врач может быть либо участковым, либо специалистом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 20:01 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
7feet(возникнет зависимость между неключевыми атрибутами "Номер_участка" и "Табельный_номер"). И давно у вас табельный номер - неключевой атрибут? 7feetИзначально сказано, что врач может быть либо участковым, либо специалистом. (терпеливо) Участковый - это просто общеупотребимое сокращение от "участковый терапевт" (как и от "участковый милиционер"). В детских поликлиниках аналогично будет "участковый педиатр", раньше было понятие "участковая медсестра" (ходили по домам, делали уколы и другие процедуры больным). Вам нужно понять взаимосвязь этих понятий, понять, что есть иерархия специализаций, а привязка к участку - атрибут некоторых типов специалистов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 20:34 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
softwarerИ давно у вас табельный номер - неключевой атрибут? Я, конечно, в базах данных не силен, но разве связь "Участковый" --> "Участок" - идентифицирующая? По-моему, нет. Тогда табельный номер - неключевой атрибут для сущности "Участок". softwarer(терпеливо) Участковый - это просто общеупотребимое сокращение от "участковый терапевт" (как и от "участковый милиционер"). Вы серьезно считаете, что я не знаю значения слова "участковый", или издеваетесь? "Иерархия специализаций" - это нагородить огород, чего делать никто не просит. И даже если построить эту иерархию, внизу окажется тот самый "Участковый", которого нужно связать с таблицей "Участки". Вопрос, ответ на который я хотел бы получить, задан в первом посте. Есть две таблицы, возможно ли в принципе их связать, не нарушив при этом ссылочную целостность, третью нормальную форму и не создав аномалий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 21:27 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
7feetЯ, конечно, в базах данных не силен, но разве связь "Участковый" --> "Участок" - идентифицирующая? По-моему, нет. Тогда табельный номер - неключевой атрибут для сущности "Участок". Это вообще не атрибут сущности "участок". Ему совершенно нечего там делать. Но если Вы рассматриваете ключ в эту сторону, возникает аналогичный вопрос: с каких это пор "номер участка" не является ключевым атрибутом сущности "участок"? 7feetВы серьезно считаете, что я не знаю значения слова "участковый", или издеваетесь? Я считаю, что у Вас проблема на концептуальном уровне из-за попытки стянуть в одну иерархию (типов-подтипов) разнородные понятия, и эта проблема приводит к обоснованным сомнениям "как проектировать таблицы". Как только Вы начнёте мыслить в правильных терминах, ответ станет очевидным, а до тех пор.. удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 21:32 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
softwarerЭто вообще не атрибут сущности "участок". Ему совершенно нечего там делать. Тогда что означает ваша фраза "протянуть внешний ключ от участкового к участку", если не связь "Участковый" --> "Участок", при которой атрибут "Табельный_номер" автоматически попадает в сущность "Участок"? softwarerс каких это пор "номер участка" не является ключевым атрибутом сущности "участок"? По определению "Потенциальный ключ - подмножество атрибутов отношения, удовлетворяющее требованиям уникальности и минимальности (несократимости)". Если "номер участка" - потенциальный ключ, то он не может повторяться, а значит, нельзя указать для участка несколько домов/улиц. В то же время ключ "Улица+Дом+Номер_участка" противоречит требованию минимальности. Поправьте, если я не прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 22:00 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
7feet, Вы хорошо понимаете кто такой Врач? И Вы действительно полагаете, что Врач "обслуживает участок"? Как дворник? Или это просто курсовая работа студенческая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 22:45 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
БредятинаИли это просто курсовая работа студенческая? Разумеется, это контрольная работа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 22:50 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
7feetТогда что означает ваша фраза "протянуть внешний ключ от участкового к участку", alter table doctor add foreign key ... 7feetЕсли "номер участка" - потенциальный ключ, то он не может повторяться, а значит, нельзя указать для участка несколько домов/улиц. Правда, нельзя? Может ещё раз подумаете? Контрольный вопрос: представьте себе, что участок имеет название и посмотрите на свою схему с учётом этого требования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 22:50 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
7feet1) В сущности "Участковый" сделать "Номер_участка" первичным ключом. Не получается из-за того, что "Участковый" является подтипом сущности "Врач". . И потому возможны несколько экземпляров этой сущности с одинаковым значением "Номер_участка"? Ить "Каждый участок обслуживается только одним врачом". Как то обстоятельство, что это подтип "Врач" приведет к нескольким разным сущностям с одинаковым "Номер_участка"? Может Вы не все договариваете про свои задумки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 23:04 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
7feetБредятинаИли это просто курсовая работа студенческая? Разумеется, это контрольная работа. Но это же не повод делать заведомые глупости:) Объясните своему преподавателю, что врачи не обслуживают участки:) Концепция "участка" вообще никакого смысла не имеет, поэтому у Вас и возникают проблемы на ровном месте. Если же Вы хотите непременно, чтобы врачи обслуживали участки, то Вам уже не один раз (несколько человек) написали что нужно сделать, но Вы все проигнорировали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 23:14 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
vadiminfoИ потому возможны несколько экземпляров этой сущности с одинаковым значением "Номер_участка"? Чтобы одному врачу соответствовал один участок, я планировал на "Номер_участка" constraint повесить... БредятинаВам уже не один раз (несколько человек) написали что нужно сделать, но Вы все проигнорировали. Там во втором посте картинка, сделанная в Erwin... Команда SELECT изучена до раздела WHERE. Какие тут "alter table doctor add foreign key ..."? Побойтесь бога. Нужно линию нарисовать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 23:40 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
7feetЧтобы одному врачу соответствовал один участок, я планировал на "Номер_участка" constraint повесить... ... Ну это как бы не проясняет - "сделать первичным ключем" - это тоже означет "constraint повесить". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2012, 23:48 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
7feetТам во втором посте картинка, сделанная в Erwin... Команда SELECT изучена до раздела WHERE. Какие тут "alter table doctor add foreign key ..."? Побойтесь бога. Нужно линию нарисовать... Вот именно. И продолжаете уверенно игнорировать. Зачем тогда было спрашивать:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 00:46 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, разобрался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 11:31 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
softwarerИ давно у вас табельный номер - неключевой атрибут? Лично внедрял Зарплату в организации, где было Правило: временным (сезонным, и на испытательном сроке) работникам присваивается свободный табельный номер свыше 1000. Среди временных текучка - сегодня 1971-й ушел, завтра 1972-й пришел. Если же работник оправдал надежды, и переводится в постоянный состав, ему присваивается "привилегированный" табельный номер 0...999. Но при переводе в постоянный состав все остатки и хвосты за лицевым счетом должны сохраниться... Вот так я и понял: ключ - это суррогатный ключ. А все, что показываем пользователю - так, реквизиты.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 18:04 |
|
||
|
Как связать две таблицы?
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherВот так я и понял: ключ - это суррогатный ключ. Это бесспорно. Но я не собирался долго и мучительно объяснять топикстартеру ещё и это, особенно учитывая, что у его преподавателя могут быть произвольные тараканы на этот счёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 18:13 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38040288&tid=1541470]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 303ms |

| 0 / 0 |
