Что такое сущность в программировании
Перейти к содержимому

Что такое сущность в программировании

Понятие «сущность»

Например, во введении в управление потоком задач говорю: «вычленяю главную сущность менеджмента – «ЗАДАЧУ», даю описание этой сущности».

Слово «сущность» звучит постоянно. Даже название настоящей рубрики блога звучит так: «Главная сущность менеджмента – «задача».

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

Иначе возникнет недопонимание этого термина. В то время как на нём базируется многое в управлении потоком задач.

Итак, что такое сущность?

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

Атрибут сущности – это некоторое поименованное свойство (черта, характеристика, признак) сущности.

У сущности может быть несколько атрибутов.

Сущность – это тип объектов, а не конкретный объект. Когда мы не знаем конкретные значения атрибутов какого-то объекта, мы обозначаем его как тип.

Например, если мы не знаем чьё-либо ФИО, год рождения, то мы говорим: «я видел какого-то человека», а иногда даже так: «какой-то тип, проходил мимо». Если бы мы знали такие значения атрибутов, как ФИО, год рождения, то, например, мы бы сказали так: «я видел Петрова Ивана Васильевича моего соседа», или «Сидоров Александр Владимирович проходил мимо». То есть мы бы обозначили его как конкретный объект.

Отсюда, «человек» — это тип и значит сущность, а Мотаев Александр Александрович 1976 года рождения, автор настоящего блога – это конкретный объект. «Автомобиль» — это тип и поэтому сущность, а чёрная Тойота Лэнд Крузер Прадо 2010 года выпуска с госномером а555аа – это конкретный объект. «Город» — это тип и, следовательно, сущность, а «Екатеринбург областной центр Свердловской области» — это конкретный объект.

Сущность – это тип объекта, целостность и индивидуальность существования, которого определяется его функциональным предназначением. То есть это такой тип, который имеет чёткие границы и одну или несколько отличительных особенностей, совокупно отражающих его возможности (способности), которые предопределяют его функциональное предназначение.

Например, имеем какое-то живое существо. Его границы обозначены пределами его физического биологического тела.

Если данное живое существо обладает такой отличительной особенностью как «разум», который придаёт ему способность мыслить всеобще, осознанно, способность анализа, абстрагирования и обобщения, то на 99,9% — это «человек», а не «обезьяна» и не «медведь».

Предназначение человека – созидать наследие, используя разум. Любой тип, который имеет разум, то есть является сущностью «человек», обладает возможностью (способностью) созидать наследие, и по идее должен это делать. В этом его смысл бытия – функциональное предназначение. [2]

Или, допустим, мы имеем какое-то транспортное средство. Его границы обозначены физической технической конструкцией, которая имеет кузов, четыре колеса и двигатель.

Если указанное транспортное средство имеет возможность перемещать людей и/или грузы в произвольном направлении при наличии дороги, то скорее всего – это «автомобиль», а не «поезд» или не «самолёт», или не «пароход».

Его предназначение – перемещать людей и/или грузы по земле из одной точки в другую в произвольном направлении, где есть пригодная дорога.

Сущность – это тип объекта, целостность и индивидуальность существования, которого определяется также перечнем универсальных (существенных, индивидуальных) названий, а не значений атрибутов. Целостность и индивидуальность типа, кроме функций, обозначается также и набором названий атрибутов. А целостность и индивидуальность конкретного объекта – и набором названий, и совокупностью значений этих атрибутов.

То есть у сущности нет значений атрибутов, а только их названия. А у конкретного объекта должны быть ещё и конкретные уникальные значения атрибутов.

Названия атрибутов, присущие типу, наравне с функциональностью типа, позволяют идентифицировать и отделить в пространстве и времени один тип от другого. В том числе на логическом уровне. Не путать их между собой.

Например, сущностью является такой тип объектов как «смартфон». Чтобы идентифицировать и отсортировать «смартфон» от устройств других типов, у него есть список следующих названий атрибутов, без их значений: сенсорная панель, серийный номер, модель, операционная система, ЦП, ОЗУ, GPS, Wi-Fi, Bluethooth и т.д.

Всё, что обладает совокупностью этих названий атрибутов – есть сущность «смартфон». То есть любое устройство, которое имеет сенсорную панель, серийный номер, модель, операционную систему, ЦП, ОЗУ, GPS, Wi-Fi, Bluethooth и при этом обладает такой функциональностью, как «осуществление звонков и отправление сообщений из любого местонахождения», является сущностью «смартфон».

В отличие от сущности каждый конкретный объект, чтобы его идентифицировать и отделить от других конкретных объектов, в том числе от других сущностей, должен обладать не только названиями атрибутов, но и своими уникальными конкретными ЗНАЧЕНИЯМИ атрибутов. Например, мой смартфон имеет следующие уникальные значения атрибутов:

Таблица: Пример названий и значений атрибутов моего смартфона

Пример названий и значений атрибутов моего смартфона

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

При этом названия атрибутов сущности должны быть универсальными, существенными и индивидуальными.

Универсальность заключается в том, что атрибут сущности должен быть пригодным для всех конкретных объектов, относящихся к ней.

Например, атрибут «сенсорная панель» универсален для любого устройства, являющегося смартфоном. Все смартфоны имеют сенсорную панель. Всё что не имеет сенсорную панель – не смартфон. То же можно сказать об атрибуте «GPS».

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

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

Индивидуальность должна отражать свойство, отличающее сущность от других или добавлять признак, который сужает выборку. Например, взяв атрибут «сенсорная панель», мы сужаем выборку устройств до тех устройств, которые имеют её, а остальные отбрасываем.

Прибавление каждого нового атрибута должно повышать степень индивидуальности сущности и увеличивать точность отсортировки устройств по сущностям.

Сущность – это тип, у которого есть срок «жизни». Всё течёт, всё меняется. Одни сущности исчезают, другие появляются.

Например, были «динозавры» — вымерли. Появились «млекопитающие». У любой сущности есть срок жизни. Пока сущность нужна и применяется, она «живёт».

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

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

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

Если мы просто укажем одно название атрибута какой-то сущности, например, «сенсорная панель», то мы не сможем по этому названию атрибута определить эта сущность – «смартфон» или нет. Этот атрибут необходим, но его будет недостаточно. Может это такая сущность, как «планшет»? Поэтому нужен минимально необходимый и максимально достаточный набор названий атрибутов (или совокупность, список, перечень, комбинация, что в данном случае я считаю тождественным).

В частности, чтобы чётко отделить «смартфон» от «планшета», нам необходим минимальный перечень функций и названий атрибутов. Думаю, если мы укажем функцию: «осуществление звонков и отправление сообщений из любого местонахождения» и следующий перечень названий атрибутов: сенсорная панель, серийный номер, модель, операционная система, ЦП, ОЗУ, GPS, Wi-Fi, Bluethooth, то этого скорее всего будет достаточно для того, чтобы определить (угадать), что это сущность «смартфон».

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

Сущность – это тип, по наличию функций и названий атрибутов которого неопределённое количество конкретных объектов относится или не относится к этому типу. Это означает, что если какой-то конкретный объект имеет основную функцию: «осуществление звонков и отправление сообщений из любого местонахождения» и при этому у него есть совокупность всех следующих названий атрибутов: сенсорная панель, серийный номер, модель, операционная система, ЦП, ОЗУ, GPS, Wi-Fi, Bluethooth, то этот объект почти наверняка является сущностью «смартфон».

При этом такой сущностью будет неограниченное, неопределенное и любое количество конкретных объектов, имеющих указанные функции и названия атрибутов. Эта множественность является одной из ключевых характеристик сущности. Только то, что может напрямую или опосредованно (через подсущность) объединять под собой большое (более одного) и постоянно расширяющееся множество конкретных объектов, может являться сущностью. Нет смысла выделять отдельную сущность, для единичного экземпляра объекта. В этом случае объект и есть объект, а не сущность.

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

Сущность может быть или абстрактной, или процессной.

Сущность может быть или абстрактной, или процессной.

Абстрактная сущность — это сущность, объединяющая (обобщающая) другие подсущности — другие сущности (абстрактные и/или процессные), наследующие её:

  • функции, но в более узкой специализации,
  • и названия атрибутов, но обязательно имеющие дополнительно к наследуемым свои отличительные названия атрибутов.

В абстрактную сущность обобщаются другие сущности, а не конкретные объекты. В этом и заключается её абстрактность. То есть абстрактная сущность не может объединять конкретные объекты с конкретными значениями атрибутов.

Например, сущность «дом» объединяет такие отдельные сущности (подсущности), как «многоквартирный дом (МКД)» и «индивидуальное жилое строение (ИЖС)». Эти сущности имеют свои комбинации названий атрибутов, но не их значений. Поэтому они тоже сущности, а не конкретные объекты.

И «ИЖС» и «МКД» — это «дом». Но у них будет разная специализация функций.

Для сущности «дом» можно обозначить такую функцию как «обеспечение крыши над головой для его жильцов». Она будет общей и для «МКД» и для «ИЖС».

Только для сущности «МКД» функция будет более специализированной: «обеспечение крыши над головой для его жильцов, представляющих собой большое количество семей, как связанных, так и не связанных родственными узами и проживающих рядом на ограниченной территории».

При этом «ИЖС» будет иметь следующую специализированную функцию: «обеспечение крыши над головой для его жильцов, проживающих совместно и представляющих собой одну семью, связанную родственными узами». Как-то так.

И «ИЖС» и «МКД» унаследуют от «дома» такие названия атрибутов, как «адрес», «фундамент», «крыша», «количество этажей». Это будут общие – одинаковые названия атрибутов. По их наличию и идёт объединение (обобщение). Но при этом каждая из этих сущностей добавит свои отличительные названия атрибутов.

«ИЖС» добавит «тип автономного отопления», «площадь приусадебного участка», «наличие хозпостроек на приусадебном участке», «наличие плодовых насаждений на приусадебном участке». Этих названий атрибутов нет у «МКД».

Зато у «МКД» есть «количество квартир», «наличие лифта», «площадь придомовой территории» и другие.

Из-за разности индивидуальных названий атрибутов и из-за различий в функциональной специализации эти сущности и отличаются друг от друга (МКД от ИЖС). При этом они остаются сущностью «дом». И поэтому «дом» является абстрактной сущностью, а не процессной. В этой ситуации абстрактная сущность «дом» становится контекстной для относящихся к ней подсущностей – других сущностей: «МКД» и «ИЖС».

Процессная сущность (ПС) – это сущность, которая рождается в среде «процессы» [3] , поэтому и процессная, и которая объединяет (обобщает) неограниченное количество конкретных процессных объектов (КПО), наследующих её названия атрибутов, которым для их идентификации присваиваются конкретные значения атрибутов.

Процессная сущность в отличие от абстрактной объединяет (обобщает) не другие сущности, а уже конкретные процессные объекты (КПО).

Конкретный процессный объект (КПО) – это внутри контекстной процессной сущности (которая является типом объектов) конкретный материальный или нематериальный объект, обладающий в определённый момент времени конкретными значениями всех атрибутов, унаследованных от процессной сущности, необходимых и достаточных для его идентификации.

Список названий атрибутов КПО наследует от контекстной процессной сущности, к которой он относится.

Поэтому у всех КПО, относящихся к процессной сущности, одинаковые названия её обязательных атрибутов. Объединение (обобщение) происходит по наличию общих – одинаковых названий атрибутов у КПО, унаследованных от процессной сущности, к которой они относятся. В этой ситуации процессная сущность становится контекстной для относящегося к ней конкретного процессного объекта.

Например, приведённые выше в настоящей статье в таблице «Пример названий и значений атрибутов моего смартфона» значения атрибутов смартфона описывают конкретный процессный объект (КПО) – мой смартфон. Для него контекстной процессной сущностью будет сущность «смартфон», так как он к ней относится, он наследует от неё заданный набор названий атрибутов.

Дифференциация КПО внутри процессной сущности выполняется по значениям атрибутов, а не по названию. Отсюда, КПО различаются друг от друга не дополнительными атрибутами и функциональной специализацией, а значениями (совокупностью, комбинацией значений) атрибутов, унаследованных от процессной сущности.

В частности, в «МКД» обобщаются все конкретные процессные объекты, которые уже будут описываться, идентифицироваться и дифференцироваться между собой не названиями атрибутов, а и их значениями – совокупностью (комбинацией) значений.

Например, набором значений таких атрибутов, как «этажность», «адрес», «количество квартир», «наличие лифта», «площадь придомовой территории» и т. д.

У каждого КПО, относящегося к процессной сущности «МКД», будут конкретные значения этих атрибутов, образующие уникальную их комбинацию. Эта уникальная комбинация значений атрибутов и позволит отделить один КПО от другого. А наличие у каждого такого КПО одинакового набора названий обязательных атрибутов объединит их в одну сущность «МКД». Она для них и будет контекстной.

Приведём пример в виде следующей таблицы:

Таблица: Пример взаимосвязи и иерархии сущностей

Пример взаимосвязи и иерархии сущностей

Представленная таблица наглядно показывает взаимосвязь и иерархию сущностей:

«абстрактная сущность (АС) → процессная сущность (ПС) → конкретный процессный объект (КПО)».

Кстати, на практике бывают иерархии более глубокие, например такая:

«абстрактная сущность (АС) → абстрактная сущность (АС) → процессная сущность (ПС) → конкретный процессный объект (КПО)».

То есть может быть несколько уровней вложенности сущностей.

В нашем примере, абстрактная сущность «дом» имеет свою функцию. Объединяет такие процессные сущности (в данном случае подсущности), как «МКД» и «ИЖС».

У этих процессных сущностей есть специализация по функции. У каждой своя. Есть общие единые названия атрибутов. По которым можно и «МКД» и «ИЖС» отнести к абстрактной сущности «дом».

При этом у каждой процессной сущности имеются дополнительные названия атрибутов, по набору (списку) которых можно их отличить друг от друга (МКД от ИЖС) и отделить.

Отдельная процессная сущность объединяет свой набор конкретных процессных объектов (КПО).

Внутри каждой процессной сущности всякий КПО имеет свои комбинации значений. По которым их можно отличить друг от друга и отделить. То есть названия атрибутов у них одинаковые, унаследованные от контекстной процессной сущности, а значения разные. Даже если значения некоторых атрибутов будут одинаковыми, общая их комбинация будет уникальной. Что позволит их рассортировать между собой.

Более того, когда мы формируем процессную сущность путём составления набора названий её атрибутов, мы должны формировать такой набор, чтобы в дальнейшем при присвоении конкретному процессному объекту значений этих атрибутов обязательно складывалась уникальная комбинация этих значений. Именно по этой уникальной комбинации значений и будет вестись отбор – отделение одного КПО от другого.

И ещё заметьте каждая процессная сущность имеет своё множество КПО – более одного. В свою очередь абстрактная сущность «дом» объединяет эти множества в одно большое множество под собой – опосредованно – через ПС: «МКД» и ПС: «ИЖС». И это множество неограниченное, может постоянно расширяться и дополнятся. Поэтому и «МКД», и «ИЖС», и «дом» — это сущности.

Полная версия статьи доступна в моей книге «Задачи чудесные, или Козырная «ТУЗ» Мотаева!»

С уважением к Вам и Вашему делу, Мотаев Александр

Обсудить эту и другие статьи блога вы можете в нашем Telegram-канале «Управление потоком задач».

[1] — Хейвуд «Вуди» Аллен (Аллан Стюарт Конигсберг, род. 01.12.1935) — американский кинорежиссёр, актёр-комик, продюсер, четырёхкратный обладатель премии «Оскар», писатель, автор многочисленных рассказов и пьес.

[2] — Это моя личная точка зрения на предназначение человека на земле. Я считаю, что каждый человек должен созидать. Созидать Наследие, которое останется после него и будет приносить пользу другим людям. Таким наследием по древним обычаям минимум должно быть три «Д»: Дом, Дерево, Дети. Дом останется детям, как крыша над головой, без которой не может жить человек, или как их стартовый капитал. Дерево – это кислород, утилизация CO₂, экология. Дети – это потенциальные созидательные потомки, конечно же если их в дальнейшем правильно воспитать. Когда выполнена программа минимум, а я, например, её выполнил, далее можно созидать какое угодно наследие: созидательных потомков – воспитанных на созидание детей (родить мало, надо ещё воспитать, заточить детей на созидание), изобретения, дома, заводы, пароходы, произведения литературы, искусства, архитектуры и т. д. Всё, что приносит пользу другим людям, в том числе эстетическую. В этом предназначение человека, в этом его бессмертие. В наследии бессмертие! На мой взгляд, именно для созидания разум дан человеку природой и богом. Созидание требует труда, требует развития разума и сознания человека. Поэтому, созидая человек самосовершенствуется и развивается как личность, достигает осознания. Согласно Юнгу, самый тягчайший грех — нежелание достигнуть осознания, хотя такая возможность есть. Именно поэтому Юнг говорит, что с точки зрения психологии одной из самых злых и губительных сил являются нереализованные творческие способности. Если кто-то обладает творческим даром и вследствие своей лени или по какой-либо другой причине его не использует, эта психическая энергия превращается в настоящий яд. А я добавлю, если человек обладает разумом и его не использует для созидания. Он грешит. Он обрекает себя и часто тех, кто его окружает, на муки при жизни. Более подробно я эти мысли разворачиваю в блоге «Патримонизм» по адресу: http://patrimonizm.ru

[3] — В целях настоящего блога процесс — это устойчивая и целенаправленная совокупность взаимосвязанных процессных задач и действий, которые по определённой технологии воспроизводимо преобразуют входы в выходы для получения заранее определённых результатов, представляющих ценность для внешнего или внутреннего потребителя выходов процесса. В организации может функционировать несколько процессов. Одним из таких процессов, по моему мнению, является процесс «Управление Потоком Задач» — т. е. «менеджмент», описываемый в книге «Задачи чудесные, или Козырная «ТУЗ» Мотаева!». Для осуществления этого процесса нужна «Технология Управления Задачами»

Определение типов сущности

Цель: определение основных типов сущности, присутствующих в представлении данного пользователя о предметной области приложения. На этом этапе определяются основные объекты, которые могут интересовать пользователя. Эти объекты являются типами сущности, входящих моделей.

Сущность-это реальный или воображаемый объект, имеющий существенное значение для рассматриваемой предметной области.

Сущность имеет имя, уникальное в пределах моделируемой системы. Так как сущность соответствует некоторому классу однотипных объектов, то предполагается, что в системе существует множество экземпляров данной сущности. Объект, которому соответствует понятие сущности, имеет свой-набор атрибутов — характеристик, определяющих свойства данного представителя класса. При этом набор атрибутов должен быть таким, чтобы можно было различать конкретные экземпляры сущности.

Одно из общепринятых графических обозначений сущности — прямоугольник, в верхней части которого записано имя сущности, а ниже перечисляются атрибуты, причем ключевые атрибуты помечаются, например, подчеркиванием или специальным шрифтом.

Каждая сущность должна обладать некоторыми свойствами:

1. иметь уникальное имя;

2. обладать одним или несколькими атрибутами, которые либо принадлежат сущности, либо наследуются через связь;

3.обладать одним или нескольким атрибутами, которые однозначно идентифицируют каждый экземпляр сущности;

4. каждая сущность может обладать любым количеством связи с другими сущностями данной модели.

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

Тип сущности Описание Псевдонимы Особенности использования
Заказчик Сведения о заказчике Заказчик Заказчик может заказать несколько звонков
Получатель Сведения о получателе Получатель Получатель может получать звонки от разных заказчиков
Заявка Информация о звонке Заявка, телефонный звонок Заявка может поставляться несколькими заказчиками, каждый вид заявки может, каждая заявка может быть получена несколькими получателями.

Рис.№1. Сведения о типах сущностей

— Чтобы идентифицировать типы сущностей необходимо изучить представление пользователей и извлечь все используемые в них существительные, или сочетание существительного и прилагательного. После чего выбираются самые крупные и важные объекты для нашей предметной области.

1.2 Определение типов связи

Цель: определение важнейших типов связи, существующих между сущностями, выделенными на предыдущем этапе. Для этого из представлений пользователей выбираются все выражения, в которых содержатся глаголы.

Связь — это ассоциирование сущности. Сущности, участвующие в связи, называются участниками.

Между сущностями могут быть установлены: бинарные ассоциации, показывающие, каким образом сущности соотносятся или взаимодействуют между собой. Связь может существовать между двумя разными сущностями или между сущностью и ей же самой (рекурсивная связь). Она показывает, как связаны экземпляры сущностей между собой. Если связь устанавливается между двумя сущностями, то она определяет взаимосвязь между экземплярами одной и другой сущности. Графическая интерпретация связи позволяет сразу прочитать смысл взаимосвязи между сущностями, она наглядна и легко интерпретируема. Связи делятся на три типа по множественности:

1. один-к-одному (1:1),

2. один-ко-многим (1:М),

3. многие-ко-многим (М:М).

Связь «один-к-одному» означает, что экземпляр одной сущности связан только с одним экземпляром другой сущности. Связь «один-ко-многим»(1: М) означает, что один экземпляр сущности, расположенный слева по связи, может быть связан с несколькими экземплярами сущности, расположенными справа по связи, а связь «многие-к-одному» (M:1) означает, что один экземпляр первой сущности может быть связан с несколькими экземплярами второй сущности, и наоборот, один экземпляр второй сущности может быть связан с несколькими экземплярами первой сущности.

Определим типы связей наших сущностей. Данные представлены в таблице, па рисунке №2.

Тип сущности Связь Тип сущности Кардинальность связи
Заказчик Заказывает Телефонный звонок 1:М
Получатель Получает Телефонный звонок М:1

Рис.№2. Сведения о типах связей

1.3 0пределение атрибутов и связывание их с типами сущностей и связей

Цель: связывание атрибутов с типами сущности и связи.

Атрибут — это любая характеристика сущности значимая для рассматриваемой предметной области и предназначенная для квалификации, идентификации, классификации, количественной характеристики или выражения состояния сущности.

Кроме того, в ER-модели допускается принцип категоризации сущностей. Это значит, что, как и в объектно-ориентированных языках программирования, вводится понятие подтипа сущности, то есть сущность может быть представлена в виде двух или более своих подтипов — сущностей, каждая из которых может иметь общие атрибуты и отношения и/или атрибуты и отношения, которые определяются однажды на верхнем уровне и наследуются на нижнем уровне.

— составные — состоят из простых атрибутов;

— однозначные — атрибуты, которые могут принимать единственное значение;

— многозначные — атрибуты, которые могут принимать много значений;

— производные — это атрибуты, значение которых могут быть установлены с помощью значений других атрибутов.

Необходимо выбрать все данные, описывающие сущности и связи, выделенные в создаваемой модели базы данных. Выбранные существительные представляют собой атрибут в том случае, если они описывают свойство, качество или характеристику некоторой сущности или связи.

Далее атрибуты документируют, то есть каждому выделенному атрибуту присваивают осмысленное имя. О каждом атрибуте в документацию помещают следующие сведения:

1. имя атрибута и его описание;

2. любые алиасы или синонимы, имеющиеся для данного атрибута;

3. тип данных и размерность значений;

4. значение, принимаемое для атрибута по умолчанию, если таковое имеется;

5. является ли атрибут обязательным;

6. является ли атрибут составным;

7. является ли атрибут производным;

8. является ли атрибут многозначным.

Сведения об атрибутах представлены в таблице на рис.№3.

Атрибуты Тип данных Простой Синонимы Описание
Заказчик разговора
Код абонента счётчик Код абонента, заказчика разговора
ФИО текстовый Личные данные абонента Личные данные абонента
Адрес Текстовый Адрес абонента Адрес абонента
№_телефона_заказчика Числовой №_телефона_заказчика №_телефона_заказчика
Дата Дата/время Дата Дата звонка
Время Дата/время Время Время звонка

1.4 0пределение доменов атрибутов

Цель: определение доменов для всех атрибутов, присутствующих в каждой локальной концептуальной модели данных.

Домен — это набор значений, которые могут быть присвоены атрибутам сущности. Домены должны содержать следующие данные:

1. набор допустимых значений для атрибутов;

2. сведения о размере и формате каждого из полей атрибутов.

После выделения всех имеющихся доменов их документируют, присваивают осмысленные имена.

Сведения о доменах атрибутов представлены в таблице на рисунке №4.

1.5 Определение атрибутов, являющихся потенциальными, первичными и внешними ключами

Цель: определение всех потенциальных ключей для каждого типа сущности и если таких ключей окажется несколько выбор среди них первичного ключа. Также необходимо выделить внешние ключи для каждой сущности, если они имеются.

Выделяют следующие виды ключей:

1. потенциальный ключ — это атрибут, набор атрибутов, однозначно идентифицирующих каждый экземпляр сущности;

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

3. внешний ключ — это атрибут или группа атрибутов дочерней сущности, которые соответствуют первичному ключу родительской сущности.

4. составной ключ — первичный ключ, состоящий из нескольких атрибутов.

При выборе первичного ключа необходимо принимать во внимание следующие рекомендации:

1. использовать потенциальный ключ с минимальным набором атрибутов;

2. использовать тот потенциальный ключ, вероятность изменения значений которого минимальна;

3. выбирать тот потенциальный ключ, который имеет минимальную вероятность потери уникальности значений в будущем;

4. остановить свой выбор на потенциальном ключе, с которым будет проще всего работать с точки зрения пользователей.

После выбора первичных, альтернативных и внешних ключей сведения о них документируются.

1.6Создание диаграммы «сущность — связь»

Цель: разработка ER — диаграммы, содержащей концептуальное отражение представлений пользователя о предметной области приложения.

Существует множество подходов к построению таких моделей: графовые модели, семантические сети, модель «сущность-связь» и т.д. Наиболее популярной из них оказалась модель «сущность-связь » или называемая ещё ER-моделью.

Моделирование предметной области при помощи модели «сущность-связь» базируется на использовании графических диаграмм.

П. Логическое проектирование

Логическое проектирование базы данных представляет собой процесс конструирования моделей информационной структуры предприятия, выполняемые в соответствии с требованиями выбранной схемы организации информации. Однако создаваемая логическая модель не зависит от особенностей конкретных СУБД и других физических условий реализации.

Основой анализа корректности схемы являются так называемые функциональные зависимости между атрибутами базы данных. Некоторые зависимости между атрибутами отношений являются нежелательными из-за побочных эффектов и аномалий, которые они вызывают при модификации базы данных. При этом под процессом модификации базы данных мы понимаем внесение новых данных в БД или удаление некоторых данных из БД, а также обновление значений некоторых атрибутов.

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

На данном этапе необходимо проверить связи, проверить модели с помощью правил нормализации и построить окончательную диаграмму сущность-связь.

2.1 Сущности, типы сущностей

Сущность — Это реальный или воображаемый объект, информация о котором представляет интерес. В диаграммах Er-модели сущность представляется в виде прямоугольника, содержащего имя сущности. При этом имя сущности — это имя типа, а не конкретного объекта — экземпляра этого типа. Каждый экземпляр сущности должен быть отличим от любого экземпляра той же сущности. В зависимости от режима представления диаграммы прямоугольник может содержать имя сущности, ее описание, список ее атрибутов и другие требования.

Каждая сущность должна обладать следующими свойствами:

иметь уникальный идентификатор;

содержать один или несколько атрибутов, которые либо принадлежат сущности, либо наследуются через связь с другими сущностями;

содержат совокупность атрибутов, однозначно идентифицирующих каждый экземпляр сущности;

Любая сущность может иметь произвольное количество связей с другими сущностями. Сущностями могут быть люди, места, самолеты, рейсы, вкус, цвет и т.д. Необходимо различать такие понятия, как тип сущности и экземпляр сущности. Понятие тип сущности относится к набору однородных личностей, предметов, событий или идей, выступающих как целое. Экземпляр сущности относится к конкретной вещи в наборе.

Определите три ядра класса объектов: удочка, ассоциативная и характерная, и также подкласс ассоциативных объектов — назначения

Ассоциативный аромат (ассоциация) является передачей типа «многие — к — многие» между двумя или больше объектами или копиями объектов. Ассоциации рассматривают как полные объекты:

— Они могут участвовать в других ассоциациях и назначениях таким же образом, как объекты удочки,

— Может обладать свойствами, то есть иметь не только коммутируемый из ключевых атрибутов, необходимых для инструкций связи, но также и любого числа других атрибутов, характеризующих передачу. Характерный аромат (характеристика) является передачей типа «многие — к — один» или «один — к — один» между двумя объектами (особый случай ассоциации). Единственная цель характеристики в рамках продуманной области данных состоит в описании или спецификации некоторого другого аромата. Необходимость их воскресает, потому что у объектов реального мира иногда есть многозначные свойства. 0бозначающая аромат или назначение — передача типа «многие — к — один» или «один — к — один» между двумя объектами и отличаются от характеристики, которая не зависит от определяемого аромата.

Назначения используют для хранения повторяющихся значений больших текстовых атрибутов: наказания «кодификаторы», изученные студентами, именами устройств и их отделов, материально-технических ресурсов, и т.д.

Пустите нам переопределять теперь аромат удочки как аромат, который не является ни ассоциацией, ни назначением, характеристикой. У таких объектов есть независимое существование, хотя они и могут определять другие объекты как, например, инспектор назначает отдел кадров.

Есть два типа сущностей: зависимая и независимая. Если экземпляры сущности могут быть уникально идентифицированы без определения ее связей с другими сущностями, она называется независимой. В противном случае сущность называют зависимой. Зависимая сущность отображается в Erwin прямоугольником с закругленными углами.

Сущности и связи — JS: Предметно-ориентированное проектирование

ERM — Модель данных, позволяющая описывать концептуальные схемы предметной области.

Сущности

Этот подход включает в себя два основных понятия: сущность и связь. Проще всего начать с примеров:

  • Пользователь
  • Кинозал
  • Фильм
  • Билет
  • Показ фильма

Это сущности нашей предметной области, с которыми предстоит работать в коде. Как видите, понятие сущность довольно интуитивно. Но также оно обладает и рядом формальных характеристик:

  • Идентификация
  • Время жизни

Идентификация означает, что мы можем рассматривать сущности независимо и выделять одни среди других. Например, у нас есть разные кинозалы, и это разные сущности. Другой пример это пользователи. Даже если два человека имеют одинаковые ФИО, мы всё равно сможем их различить на основе дополнительных признаков. В программировании обычно сущностям присваивается идентификатор (суррогатный ключ), который и используется для этой цели. Чаще всего эта задача возлагается на базу данных. В нашей ситуации базы нет, поэтому мы будем задавать его самостоятельно.

const user = new User('Илон'); console.log(user.id); // 896b677f-fb14-11e0-b14d-d11ca798dbac // User.js import uuid from 'uuid/v4'; class User  constructor(name)  this.id = uuid(); this.name = name; > > 

Библиотека uuid позволяет генерировать уникальный идентификатор, который можно использовать для идентификации. Кстати uuid очень полезная штука, может пригодиться в некоторых типах задач.

Время жизни означает, что наша сущность в какой-то момент появилась и когда-то может исчезнуть.

Связи

Между собой сущности образуют связи. Например, человек может быть владельцем нескольких машин, но машина может принадлежать только одному человеку. Пользователи Хекслета проходят много курсов, каждый курс доступен всем пользователям.

Таким образом можно выделить три основных типа связи: один к одному (o2o), один ко многим (o2m) и многие ко многим (m2m).

Выше представлена диаграмма Entity-Relationship. Она входит в стандарт UML и неплохо помогает понять то, какие сущности составляют вашу предметную область и как они друг с другом связаны.

Что можно сказать глядя на диаграмму?

  • В одном зале может быть много показов фильмов;
  • Один фильм может быть показан много раз;
  • Фильмы и залы связаны друг с другом как «многие ко многим». То есть один фильм показывается в разных залах, а в одном зале идут разные фильмы.

Всё это довольно очевидно и соответствует нашему опыту посещения кинозалов. В других предметных областях это уже не так просто, и то, как вы проектируете сущности и их связи, имеет сильное влияние на ваше приложение. Общее правило такое, чем больше связей и чем более они разнообразные, тем сложнее приложение. Часто бывает такое, что программисты «закладываются на будущее» (которое не факт, что наступит) и пытаются делать чуть ли не все связи m2m. Чаще всего такой подход оказывается примером over-engineering (гиперпроектирование), другими словами, не надо добавлять сложности там, где нет реальной потребности.

Кроме влияния на логику работы, связи также сильно влияют на способ хранения сущностей в базе данных. Например, в реляционных базах данных, связь m2m всегда подразумевает наличие промежуточной таблицы. В свою очередь рефакторинг базы данных не такое простое занятие, как изменение кода.

Пример

На Хекслете есть курсы. Каждый курс состоит из уроков. Урок не может существовать без курса. Вот как может быть представлена эта модель в коде:

const course = new Course('JS: DDD'); const lesson1 = new Lesson(course, 'Введение'); const lesson2 = new Lesson(course, 'Модель Сущность-Связь'); 

Передача курса в конструктор удобна по двум причинам. Сразу становится видна и понятна связь урока с курсом. А также на уровне языка заложено бизнес-правило, что урок не может существовать без курса.

Объекты-значения (Справочники)

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *