Хелпикс

Главная

Контакты

Случайная статья





Пример 3.



«ИСПОЛНИТЕЛЬ» получил заказ - спроектировать базу данных для «Аптечного склада». В результате разговоров с сотрудниками «ЗАКАЗЧИКА» он собрал следующую информацию:

О межтабличных связях. Вариант 15. PDF

«ИСПОЛНИТЕЛЬ» предложил базу данных. Мы рассмотрим только часть её проектного описания:

¨ Рассмотрим связи между таблицами, а вместе с ними поговорим о первичных ключах и ключах связей.


 

v Поставщики – Склады? Лекарства.

§ Таблица «Склады» фактически имеет несколько другой смысл – «Накладные по приходу (расходу) на складах», номер склада в ней даже не числится (и в списке реквизитов собранной информации по задаче – тоже).

§ А каждая накладная действительно должна однозначно показывать на поставщика, который поставил лекарство, и видимо также показывать на поставленное им лекарство. Видимо в накладной должно присутствовать поставленное количество, но оно почему-то отсутствует и в списке реквизитов собранной информации по задаче...

«Поставщик» < -> > «Накладные» < < -> «Лекарства»

§ А потому, GoodsInvoice (Номер приходной накладной) появился в таблице «Поставщики» видимо из-за (тяжких) недоразумений в оформлении правильной связи «Поставщик» < -> > «Накладные». Его надо вычеркнуть, тем более что ИНН поставщика (INN) однозначно идентифицирует поставщика и не нуждается в уточнении номером накладной (которых у него может быть много).

А в таблицу «Накладные» надо добавить поле INN, и использовать его в этой межтабличной связи для указания на поставщика, от которого поступило лекарство.

§ Кроме того, в таблицу «Накладные» надо добавить поле GoodsID, и использовать его в межтабличной связи с таблицей «Лекарства» для указания на лекарство, которое поступило от поставщика. Тем более, что к этому объявленному первичному ключу таблицы «Лекарство» никаких претензий (видимо) быть не может.

v Лекарства – Поставщики лекарств.

§ Действительно, одно и то же лекарство могут поставлять многие разные поставщики.

§ Но поставщик скорее всего тоже поставляет несколько видов разных лекарств. Так что в общем случае, связь между этими таблицами «многие ко многим».

§ Такую связь можно разделить на две, как будет рассмотрено чуть позже. Но делать это в данном случае – нет необходимости, у нас уже принято решение о связях:

«Поставщик» < -> > «Накладные» < < -> «Лекарства»

А согласно свойствам связей – из этих связей производна (выводима, логически следует) связь:

«Поставщик» < < -> > «Лекарства»

Так что связь Лекарства–Поставщики (некорректно оформленную в диаграмме) можно просто вычеркнуть.

v Лекарства – Производители лекарств.

§ Действительно, одно и то же лекарство могут производить многие разные производители (например из разных стран).

§ С другой стороны, производитель скорее всего производит несколько видов разных лекарств. Так что в общем случае, связь между этими таблицами «многие ко многим».

Такую связь можно разделить на две с помощью дополнительной (вспомогательной) таблицы типа «Что Кто производит»:

Лекарства < -> > Что Кто производит < < -> Производители

§ Но, можно поступить и по-другому, принять (достаточно естественное) соглашение – лекарства разных производителей будем регистрировать в нашей базе данных под разными регистрационными номерами.

Тогда получим связь между этими таблицами не такую как на приведённой схеме, а скорее наоборот:

Лекарства < < -> Производители

Лекарство (с конкретным регистрационным номером) показывает однозначно на своего производителя, который возможно производит и другие лекарств (зарегистрированные в нашей базе).

ИНН производителя – (видимо) однозначно идентифицирует производителя и в уточнении идентификатором лекарства не нуждается. Поле GoodsID в таблице «Производители» можно (и нужно) спокойно вычеркнуть, если конечно у нас нет желания тиражировать информацию о производителе для каждого производимого им лекарства...

Кстати отметим, «ИСПОЛНИТЕЛЬ» ввел в употребление реквизит «ИНН производителя» (INNpz), которого не было в списке опроса пользователей. Такое бывает – что удобно пользователю не всегда удобно программисту, а то что не нужно пользователю – можно ему и не показывать.  

Теперь видимо ясно, что связь Лекарства < < -> Производители можно будет описать, если добавить в (дочернюю) таблицу «Лекарства» поле «ИНН производителя» (INNpz), которое показывает для каждого зарегистрированного в нашей базе лекарства – на производителя этого лекарства.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.