Register to get access to free programming courses with interactive exercises

Ontology Python: Building data abstractions

Programmers always write software for a specific field. For example, accounting software relies on accounting rules, and a website for watching TV shows relies on TV industry concepts such as seasons or episodes. The same goes for other fields: booking flights and hotels, finding tours, buying and selling cars.

Domain

Understanding the domain for which you're writing a program is just as important as being able to program. Fields can be complex, like accounting or engineering manufacturing. You do not need to know it thoroughly, but a general understanding is still required.

Let's look at Hexlet since you know its key concepts — courses, lessons, professions, tests, code reviews, quizzes, course participants, and projects. There are two hundred entities — concepts in the code on Hexlet.

Entities are often in relationships with one another:

  • Professions consist of courses
  • Courses consist of lessons
  • Lessons consist of theory blocks, quizzes, and exercises
  • Quizzes aggregate questions
  • Questions obtain answers

These connections have specific names:

  • One-to-many or o2m — one lesson can have one course, but one course contains many lessons
  • Many-to-many or m2m — many users can take one course, and one user can take many courses
  • One-to-one or o2o — it is how users and experts connect on Hexlet

ERD

In reality, everything is still a little more complicated because the same entity may look completely different from the point of view of various systems. The users are two separate things from the point of view of accountants and mentors.

The descriptions of the objects belonging to the domain under consideration and their connections are domain ontology.

The ontology is well-known by experts in the relevant field — for example, accountants, professors, and lawyers. They often present it intuitively and informally, so we can communicate with them to build a formal ontology.

This process occurs throughout the development of the project and beyond separate stages. In creating the ontology, we identify specific terms and agree:

  • What they mean
  • How they are related

We can form the data model using the ER model in high-level conceptual database design. The architecture for future applications starts to appear at this stage.

It is not always possible to unambiguously say what connection exists between two entities. We can think ahead and immediately create more complex cases — for example, m2m rather than o2m, which affects the complexity of the code.

More complex connectivity means more code lines and higher development and maintenance costs. The complexity of the connections can be described as follows, in order of complexity: o2o, o2m, m2m. Someone can make mistakes when choosing a connector, which indicates a lack of understanding of the topic.

Let us give you an example. Suppose we implement a user and a foreign passport association in the system:

  • Intuitively, these concepts have a one-to-one relationship: a user can have a foreign passport
  • But you can change the passport if it gets lost or expires
  • In addition, some countries allow you to have more than one foreign passport

On the other hand, the real world is always more complex and more complete than any model. Programmers create a universal and comprehensive model of a particular domain and try to understand the needs of a business, identify only significant parts of the field under consideration, and transfer them to the code.

How entities appear in code varies between languages:

  • Some define types using abstract data types, interfaces, or classes
  • Others define structures
  • Others don't provide options except for dictionaries and associative arrays

From the next lesson, we'll start studying various subject areas and build suitable data models:

DDD

The most significant topic will emerge when we begin to study OOP and ORM. You can have a general idea of subject areas, entities, and relationships. Remember to read the information in the links provided — the more questions you have at this stage, the better.


Recommended materials

  1. Ontology
  2. Subject-oriented design
  3. ER model

Are there any more questions? Ask them in the Discussion section.

The Hexlet support team or other students will answer you.

About Hexlet learning process

For full access to the course you need a professional subscription.

A professional subscription will give you full access to all Hexlet courses, projects and lifetime access to the theory of lessons learned. You can cancel your subscription at any time.

Get access
130
courses
1000
exercises
2000+
hours of theory
3200
tests

Sign up

Programming courses for beginners and experienced developers. Start training for free

  • 130 courses, 2000+ hours of theory
  • 1000 practical tasks in a browser
  • 360 000 students
By sending this form, you agree to our Personal Policy and Service Conditions

Our graduates work in companies:

<span class="translation_missing" title="translation missing: en.web.courses.lessons.registration.bookmate">Bookmate</span>
<span class="translation_missing" title="translation missing: en.web.courses.lessons.registration.healthsamurai">Healthsamurai</span>
<span class="translation_missing" title="translation missing: en.web.courses.lessons.registration.dualboot">Dualboot</span>
<span class="translation_missing" title="translation missing: en.web.courses.lessons.registration.abbyy">Abbyy</span>
Suggested learning programs
profession
new
Developing web applications with Django
10 months
from scratch
under development
Start at any time

Use Hexlet to the fullest extent!

  • Ask questions about the lesson
  • Test your knowledge in quizzes
  • Practice in your browser
  • Track your progress

Sign up or sign in

By sending this form, you agree to our Personal Policy and Service Conditions
Toto Image

Ask questions if you want to discuss a theory or an exercise. Hexlet Support Team and experienced community members can help find answers and solve a problem.