Database Fundamentals for GATE Exam

Module - 4 Database Management and Warehousing
Database Fundamentals for GATE Exam

A database is a structured collection of data that is organized and stored in a systematic manner to enable efficient retrieval, updating, and management of information. It is essentially a digital repository that stores data in a structured way, making it easier to access and manipulate. Databases are crucial for managing and storing large volumes of information, and they provide a foundation for various applications and systems to work with data effectively.

Role of Databases in Storing and Managing Data

  1. Data Storage: Databases serve as centralized repositories for data. They store data in tables, where each table contains rows and columns, with each column representing a specific type of information (e.g., name, age, address), and each row representing a unique record. This structure enables efficient storage and retrieval of data.
  2. Data Retrieval: Databases allow users to retrieve specific information from a vast dataset quickly. Users can execute queries to filter and extract relevant data based on specific criteria, such as searching for customer records, product details, or sales figures.
  3. Data Integrity: Databases provide mechanisms to ensure data integrity. Through constraints, data types, and validation rules, they prevent invalid or inconsistent data from being entered into the database, maintaining the quality and reliability of the stored information.
  4. Data Security: Databases offer security features to control access to data. User authentication, authorization, and encryption help protect sensitive information from unauthorized access or breaches.
  5. Concurrency Control: Databases support multiple users and applications simultaneously. They use concurrency control mechanisms to ensure that transactions (operations) on the data occur in a controlled and synchronized manner, preventing conflicts and data corruption.
  6. Data Redundancy Reduction: By centralizing data storage, databases reduce data redundancy. Redundant data can lead to inconsistencies and inefficiencies in managing information, which a database system mitigates.
  7. Scalability: Databases can scale vertically (adding more resources to a single server) or horizontally (adding more servers) to accommodate increasing data volumes and user loads.

Importance of Databases in Various Applications

Databases play a crucial role in a wide range of applications across various industries:

  1. Business: In the business world, databases are used for managing customer information, inventory, sales records, financial data, and more. Enterprise Resource Planning (ERP) systems rely on databases to integrate various business processes.
  2. Web Applications: Databases underpin many web applications by storing user profiles, content, and transactional data. Social media platforms, e-commerce sites, content management systems, and online banking all depend on databases to deliver services.
  3. Data Analytics: Databases are central to data analytics and business intelligence. They store vast datasets that analysts and data scientists use to extract valuable insights, make data-driven decisions, and perform complex queries and aggregations.
  4. Healthcare: Electronic Health Records (EHRs) rely on databases to store patient data securely. Databases also support medical research by storing and managing large volumes of healthcare-related data.
  5. Education: Educational institutions use databases to manage student records, grades, course schedules, and library catalogs.
  6. Government: Government agencies use databases to store citizen information, tax records, and other public data. Databases help with efficient public service delivery and policymaking.
  7. Scientific Research: In scientific research, databases store and manage experimental data, observations, and research findings, facilitating collaboration and data sharing among researchers.
  8. Logistics and Supply Chain: Databases enable tracking and managing the movement of goods, inventory levels, and order processing in logistics and supply chain management systems.

In summary, databases are essential tools for organizing, storing, and managing data efficiently. Their importance spans across numerous industries and applications, serving as the backbone for data-driven decision-making and enabling businesses and organizations to operate effectively in the digital age.

Entity-Relationship Modeling:

Concept of Entities and Relationships:


Entities are objects, concepts, or things that can be uniquely identified and have attributes that describe them. In the context of databases, entities represent real-world objects or concepts for which data needs to be stored and managed. Each entity has a set of attributes that define its properties or characteristics.

Here's a breakdown of the key aspects of entities in a database:

  1. Uniqueness: Each entity is uniquely identifiable within its domain. For example, in a database for a library, "Books" could be an entity, and each book is unique and can be identified by its ISBN (International Standard Book Number).
  2. Attributes: Entities have attributes that describe their properties. These attributes are also known as fields or columns in a database table. For a "Books" entity, attributes might include title, author, publication date, and ISBN.
  3. Instances: Each entity can have multiple instances, representing individual occurrences of that entity. In the case of the "Books" entity, each book in the library is an instance of the "Books" entity.

Entities serve as the building blocks of a database's structure, and they allow you to organize and categorize data efficiently. They help define what types of data will be stored and how that data will be structured.


Relationships in the context of a database represent associations or connections between entities. They define how different entities are related to each other. Relationships are essential for modeling complex real-world scenarios where data from multiple entities needs to be correlated.

Key points about relationships in a database:

  1. Associations: Relationships indicate how entities are associated or connected to each other. For example, in a database for a university, there might be a relationship between the "Students" entity and the "Courses" entity to represent which students are enrolled in which courses.
  2. Cardinality: Cardinality defines the number of instances of one entity that can be related to the number of instances of another entity. For example, a "Student" can be related to multiple "Courses" (one-to-many relationship), or a "Course" can be related to multiple "Students" (many-to-many relationship).
  3. Attributes in Relationships: Relationships can also have attributes. These attributes provide additional information about the relationship itself. For instance, a relationship between "Employees" and "Projects" in a project management database might have an attribute indicating the employee's role in that project.
  4. Role Names: In some database systems, roles are used to describe the nature of the relationship from both ends. For instance, in a relationship between "Author" and "Book," the role names might be "Author" and "Written by."
  5. Referential Integrity: Relationships often enforce referential integrity, ensuring that data consistency is maintained. This means that data in related entities remains accurate and valid, and it prevents or manages issues like orphaned records.

In summary, entities and relationships are fundamental concepts in database design. Entities represent the objects or concepts you want to store data about, and relationships define how these entities are connected or associated with each other, allowing you to model complex data structures and real-world scenarios effectively.

Concept of Entities and Relationships

Concept of Entities and Relationships

Creating E-R Diagrams:

Entity-Relationship (ER) diagrams are a visual representation of a database schema that illustrates the entities, attributes, and relationships between entities in a clear and concise manner. These diagrams are widely used during the initial stages of database design to help developers and stakeholders understand the data structure and relationships within a system. The process of creating ER diagrams typically involves the following steps:

  1. Identify Entities: Begin by identifying the main entities in your system or database. Entities are typically nouns and represent objects or concepts about which you want to store data.
  2. Define Attributes: For each entity, determine the attributes or properties that describe it. Attributes are characteristics of entities and are typically represented as ovals in the ER diagram.
  3. Identify Relationships: Determine how the entities are related to each other. Relationships represent associations or connections between entities and are typically represented as diamond shapes in the ER diagram.
  4. Specify Cardinality: Define the cardinality of each relationship. Cardinality describes how many instances of one entity can be associated with instances of another entity. Common cardinalities include one-to-one, one-to-many, and many-to-many.
  5. Create the Diagram: Use standard symbols and notations to draw the ER diagram. Connect entities with lines to represent relationships, and label the relationships with their cardinality.
  6. Add Additional Details: You can include additional information in the ER diagram, such as primary keys, foreign keys, and constraints, to provide more context about the database schema.

Symbols and Notations in ER Modeling:

In ER modeling, several standard symbols and notations are used to represent entities, attributes, and relationships:

  1. Entity: Represented as a rectangle with rounded corners. The entity name is written inside the rectangle.
  2. Attribute: Represented as an oval connected to the entity it belongs to by a straight line. The attribute name is written inside the oval.
  3. Relationship: Represented as a diamond shape connected to the related entities by lines. The relationship name is written inside the diamond, and cardinality indicators are placed near the lines connecting the entities.
  4. Primary Key: Typically represented by underlining or bolding an attribute in an entity to indicate that it uniquely identifies each instance of the entity.
  5. Foreign Key: Represented similarly to attributes but with a dashed oval. It is used to show a reference to another entity.

Now, let's walk through a simple example of creating an ER diagram for a library database:

Scenario: We want to create an ER diagram for a library system that manages books, authors, and borrowers.

Entities and Attributes:

  • Entity 1: Book
    • Attributes: ISBN (Primary Key), Title, Publication Year
  • Entity 2: Author
    • Attributes: Author ID (Primary Key), First Name, Last Name
  • Entity 3: Borrower
    • Attributes: Borrower ID (Primary Key), First Name, Last Name, Address


  • Relationship 1: Authored by
    • Connects Book and Author
    • Cardinality: One author can write many books (one-to-many)
  • Relationship 2: Borrowed by
    • Connects Book and Borrower
    • Cardinality: One book can be borrowed by many borrowers (one-to-many)

Now, you can create the ER diagram by representing these entities, attributes, and relationships using the standard symbols and notations, connecting them as described above. Your ER diagram will provide a visual representation of the library database structure, making it easier to understand and work with during the database design process.

Relational Algebra:

Basics of Relational Algebra:

Relational algebra is a formal mathematical system used for manipulating and querying relational databases. It provides a set of operations that allow you to perform various tasks on the data stored in a relational database. These operations are based on set theory and predicate logic and provide a foundation for creating, retrieving, and modifying data in a structured and consistent manner.

Basic Operations in Relational Algebra:

  1. Selection (σ):
    • The selection operation filters rows from a relation (table) based on a specified condition or predicate.
    • It is denoted by the symbol σ followed by the condition in parentheses.
    • For example, if you have a relation "Employees" and want to select all employees with a salary greater than $50,000, you would use: σ(Salary > 50000)(Employees)
  2. Projection (π):
    • The projection operation selects specific columns (attributes) from a relation while discarding the others.
    • It is denoted by the symbol π followed by the list of attributes to be retained in parentheses.
    • For example, if you have a relation "Students" with attributes (StudentID, Name, Age), and you want to retrieve only the "Name" and "Age" attributes, you would use: π(Name, Age)(Students)
  3. Union (∪):
    • The union operation combines two relations of the same schema (with the same attributes) and returns all unique rows from both relations.
    • It is denoted by the symbol ∪.
    • For example, if you have two relations "A" and "B" and want to find all unique rows that exist in either A or B, you would use: A ∪ B
  4. Intersection (∩):
    • The intersection operation combines two relations and returns only the rows that are common to both relations.
    • It is denoted by the symbol ∩.
    • For example, if you have two relations "X" and "Y" and want to find rows that exist in both X and Y, you would use: X ∩ Y
  5. Difference (-):
    • The difference operation takes two relations and returns rows that are in the first relation but not in the second.
    • It is denoted by the symbol -.
    • For example, if you have two relations "P" and "Q" and want to find rows that exist in P but not in Q, you would use: P - Q
  6. Cartesian Product (×):
    • The cartesian product operation combines two relations and returns a new relation that contains all possible combinations of rows from the two input relations.
    • It is denoted by the symbol ×.
    • Be cautious when using this operation, as it can result in a large number of rows and is often used with other operations to filter or join the data appropriately.

These basic operations form the foundation of relational algebra and can be combined and nested to perform more complex database queries and transformations. Relational database management systems (RDBMS) use these operations internally when executing SQL queries, which is the standard language for working with relational databases.


Let's walk through some examples of using relational algebra operations on tables. We'll use simplified tables for illustration purposes.

Sample Tables:

Consider two tables, "Students" and "Courses," with the following structures:

  • Students:
  • Courses:
101CalculusDr. Smith
102Physics 101Dr. Johnson
103Biology 101Dr. Brown
104Chemistry 101Dr. Lee

Examples of Relational Algebra Operations:

1. Selection (σ): Select students majoring in Physics.

σ(Major = 'Physics')(Students)



2. Projection (π): Retrieve the names and ages of all students.

π(Name, Age)(Students)



3. Union (∪): Combine two tables to find all unique courses and their instructors.

Courses ∪ Students


101CalculusDr. Smith
102Physics 101Dr. Johnson
103Biology 101Dr. Brown
104Chemistry 101Dr. Lee

4. Intersection (∩): Find students who are also taking a course.

Students ∩ Courses

Result: (Empty set as there are no common attributes between Students and Courses)

5. Difference (-): Find students who are not taking any course.

Students - Courses



6. Cartesian Product (×): Create a table that combines every student with every course.

Students × Courses

Result: (A large table with all possible combinations of students and courses)

These examples demonstrate how relational algebra operations can be applied to tables to filter, combine, and manipulate data in a relational database. In practice, these operations are often used as building blocks to construct more complex queries and to retrieve specific information from a database.

Structured Query Language (SQL):

Introduction to SQL:

SQL, which stands for Structured Query Language, is a standardized programming language used for managing and interacting with relational databases. It provides a means to define, manipulate, and query data in a structured and organized manner. SQL is widely used in the management and retrieval of data from relational database management systems (RDBMS) such as MySQL, PostgreSQL, Oracle, Microsoft SQL Server, and SQLite.

Components of SQL:

SQL consists of several components, each serving a specific purpose in database management. The two primary components of SQL are the Data Definition Language (DDL) and the Data Manipulation Language (DML).

1. Data Definition Language (DDL):

DDL is used to define the structure and schema of a database. It includes SQL commands for creating, altering, and deleting database objects like tables, indexes, and constraints. Key DDL commands and their explanations include:

  • CREATE: This command is used to create new database objects, such as tables, indexes, views, and more. For example, you can use CREATE TABLE to define a new table's structure.
  • ALTER: ALTER commands are used to modify the structure of existing database objects. You can use ALTER TABLE to add, modify, or delete columns, constraints, or indexes.
  • DROP: DROP commands are used to delete database objects like tables, indexes, or views. For example, DROP TABLE removes a table from the database.
  • TRUNCATE: This command is used to quickly delete all rows from a table while keeping the table structure intact.
  • COMMENT: SQL allows you to add comments to database objects to provide additional information about their purpose or usage.
  • Constraints: Constraints, such as primary keys, foreign keys, unique constraints, and check constraints, are defined using DDL commands to enforce data integrity and maintain data consistency.

Data Definition Language (DDL)

Data Definition Language (DDL)

2. Data Manipulation Language (DML):

DML is used to manipulate and query data stored in the database. It includes SQL commands for inserting, updating, deleting, and retrieving data from database tables. Key DML commands and their explanations include:

  • SELECT: The SELECT statement is used to retrieve data from one or more tables. You can specify columns, filter rows, join tables, and aggregate data using functions like SUM, COUNT, and AVG.
  • INSERT: The INSERT statement is used to add new rows of data to a table.
  • UPDATE: The UPDATE statement allows you to modify existing data in a table by specifying the values to be updated and the conditions that identify which rows to update.
  • DELETE: The DELETE statement is used to remove rows from a table based on specified conditions.
  • MERGE (or UPSERT): In some database systems, the MERGE statement allows you to perform conditional inserts and updates in a single operation.

Data Manipulation Language (DML)

Data Manipulation Language (DML)

Other SQL Components:

In addition to DDL and DML, SQL includes other components and features, including:

  • Data Control Language (DCL): DCL includes commands for managing permissions and access control to database objects. These commands include GRANT (to grant permissions) and REVOKE (to revoke permissions).
  • Transaction Control Language (TCL): TCL commands are used to manage database transactions. Common TCL commands include COMMIT (to save changes) and ROLLBACK (to undo changes).
  • Stored Procedures and Functions: SQL allows you to create reusable, parameterized code blocks known as stored procedures and functions, which can be executed within SQL statements.
  • Views: Views are virtual tables created by SQL queries. They provide a way to present data from one or more tables in a structured and simplified manner.

SQL's DDL and DML components, along with its additional features, provide a powerful and versatile means of interacting with relational databases, enabling tasks such as data retrieval, modification, and schema management in a standardized way. SQL's universality and consistency have made it a foundational language for working with relational databases across various database management systems.

Basic SQL Queries

SELECT Statement for Querying Data from Tables:

The SELECT statement in SQL is used to retrieve data from one or more tables in a relational database. It allows you to specify which columns you want to retrieve, the table(s) from which to retrieve data, and optional conditions for filtering and sorting the results. Here's a breakdown of the SELECT statement:

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • column1, column2, ...: These are the columns you want to retrieve data from. You can list multiple columns separated by commas, or you can use `` to select all columns.
  • table_name: This is the name of the table from which you want to retrieve data.
  • condition: This is an optional part of the statement that allows you to filter the data. It's specified using the WHERE clause.

Filtering Data Using WHERE Clauses:

The WHERE clause is used to filter data based on specified conditions. It allows you to retrieve only the rows that meet specific criteria. Here are some common operators and examples of using the WHERE clause:

  • Comparison Operators: You can use operators like =, != (or <>), <, >, <=, and >= to compare values. For example, to find all students older than 21:
SELECT * FROM Students WHERE Age > 21;
  • Logical Operators: You can use logical operators like AND, OR, and NOT to combine conditions. For example, to find students majoring in Math or Physics:
SELECT * FROM Students WHERE Major = 'Math' OR Major = 'Physics';
  • Pattern Matching: You can use the LIKE operator with wildcard characters (%) to match patterns in text data. For example, to find all students with names starting with "A":
SELECT * FROM Students WHERE Name LIKE 'A%';
  • IN Operator: The IN operator allows you to specify a list of values for comparison. For example, to find students majoring in either Math or Biology:
SELECT * FROM Students WHERE Major IN ('Math', 'Biology');

Sorting Using ORDER BY:

The ORDER BY clause is used to sort the result set based on one or more columns in ascending (ASC) or descending (DESC) order. By default, it sorts in ascending order. For example, to retrieve students sorted by age in descending order:


Grouping Using GROUP BY:

The GROUP BY clause is used to group rows that have the same values in specified columns into summary rows. It's often used in combination with aggregate functions like SUM, COUNT, AVG, etc., to perform calculations on grouped data. For example, to count the number of students in each major:

SELECT Major, COUNT(*) AS TotalStudents
FROM Students

In summary, the SELECT statement in SQL allows you to retrieve and manipulate data from database tables. You can filter data using the WHERE clause, sort it using ORDER BY, and group it using GROUP BY. These capabilities make SQL a powerful tool for querying and analyzing data in relational databases.


Connecting to a Database Using SQL:

Connecting to a database using SQL involves using a database management system (DBMS)-specific client or command-line interface. The steps may vary depending on the DBMS you're using (e.g., MySQL, PostgreSQL, SQL Server, SQLite). Here's a general outline of how to connect to a database:

  1. Install and Configure the DBMS: First, make sure you have the DBMS installed on your system. Follow the installation instructions for your specific DBMS.
  2. Start the DBMS Service: Ensure that the DBMS service is running. You may need to start it if it's not running automatically.
  3. Open a SQL Client: Open a SQL client tool, which could be a command-line interface or a graphical tool like MySQL Workbench, pgAdmin, or SQL Server Management Studio.
  4. Connect to the Database: In the SQL client, you'll typically need to provide the following information to connect to the database:
    • Host or server name (localhost or IP address)
    • Port number (usually the default is fine)
    • Username and password (if required)
    • Database name (if not specified, some DBMSs have a default database)
  5. Connect to the Database: Use the SQL client to establish a connection to the database. Once connected, you can start executing SQL queries.

Here are some simple SQL queries and exercises for students to practice. These examples assume you have a database named "School" with a table named "Students" containing student information (e.g., StudentID, Name, Age, Major):

SQL Query 1: Select All Students

SELECT * FROM Students;

SQL Query 2: Select Students Majoring in Computer Science

SELECT * FROM Students WHERE Major = 'Computer Science';

SQL Query 3: Count the Number of Students


SQL Query 4: Select Students Older Than 20

SELECT * FROM Students WHERE Age > 20;

SQL Query 5: Select Students' Names and Majors (Projection)

SELECT Name, Major FROM Students;


SQL Exercise 1: Find the Youngest Student Write a SQL query to find the youngest student in the "Students" table.


FROM Students
WHERE Age = (SELECT MIN(Age) FROM Students);

SQL Exercise 2: Count the Number of Students in Each Major Write a SQL query to count the number of students in each major and display the results as "Major" and "Count."


SELECT Major, COUNT(*) AS Count
FROM Students

SQL Exercise 3: Select Students Who Are Majoring in Either Biology or Chemistry Write a SQL query to select students majoring in either Biology or Chemistry.


FROM Students
WHERE Major IN ('Biology', 'Chemistry');

SQL Exercise 4: Calculate the Average Age of Students Write a SQL query to calculate the average age of all students.


SELECT AVG(Age) AS AverageAge
FROM Students;

SQL Exercise 5: Find Students Whose Names Start with "A" or "B" Write a SQL query to find students whose names start with either "A" or "B."


FROM Students
WHERE Name LIKE 'A%' OR Name LIKE 'B%';

These exercises cover a range of SQL concepts, including basic SELECT statements, filtering with WHERE clauses, counting rows, and calculating averages. Students can practice these queries to gain proficiency in SQL querying.


In this lesson on database fundamentals, we've explored the foundational concepts that underpin the world of databases. Understanding these principles is crucial for anyone working with data, whether you're a database administrator, developer, analyst, or business professional. Here are the key takeaways from this lesson:

Key Takeaways:

  • Databases are structured collections of data used to store and manage information efficiently.
  • Entities represent objects or concepts with attributes in a database.
  • Relationships establish associations between entities, defining how they interact.
  • Relational algebra provides operations for manipulating relational databases, including selection, projection, union, intersection, difference, and cartesian product.
  • SQL (Structured Query Language) is a standard language for interacting with relational databases.
  • SQL consists of components like DDL (Data Definition Language) for schema management and DML (Data Manipulation Language) for data retrieval and manipulation.
  • The SELECT statement is used to query data from tables, allowing you to retrieve specific columns, filter rows with WHERE clauses, sort results with ORDER BY, and group data with GROUP BY.
  • Databases are essential across various industries and applications, such as business, web development, data analytics, healthcare, and scientific research.

By grasping these fundamental concepts and SQL operations, you'll have a solid foundation for working effectively with databases and managing data in various real-world scenarios.

Practice Questions

1. What is the cardinality of a relationship that allows each student to enroll in multiple courses, and each course can have multiple students enrolled?

A. One-to-One (1:1) 

B. One-to-Many (1:N) 

C. Many-to-One (N:1) 

D. Many-to-Many (N:N)


Answer: D. Many-to-Many (N:N)

Explanation: In a many-to-many relationship, each entity on both sides can be related to multiple instances of the other entity. In this case, each student can enroll in multiple courses, and each course can have multiple students enrolled, making it a many-to-many relationship.

2. Which SQL command is used to add a new column named "Email" to an existing table named "Employees"?

A. INSERT COLUMN Email INTO Employees 


C. UPDATE Employees SET Email = 'new_email' 

D. CREATE COLUMN Email IN Employees


Answer: B. ALTER TABLE Employees ADD COLUMN Email

Explanation: To add a new column to an existing table, you use the **ALTER TABLE** statement followed by **ADD COLUMN** in SQL.

3. In relational algebra, what operation is used to combine two relations and return only the rows that are common to both relations?

A. Projection 

B. Difference 

C. Union 

D. Intersection


Answer: D. Intersection

Explanation: The intersection operation in relational algebra combines two relations and returns only the rows that are common to both relations.

4. Which SQL clause is used to group rows based on the values in one or more columns and perform aggregate functions like SUM or COUNT on the grouped data?






Answer: C. GROUP BY

Explanation: The GROUP BY clause in SQL is used to group rows based on the values in one or more columns, allowing you to perform aggregate functions on the grouped data.

5. In the context of databases, what is the purpose of a foreign key constraint?

A. It ensures that a column has unique values. 

B. It specifies the primary key of a table. 

C. It enforces referential integrity between tables. 

D. It defines the data type of a column.


Answer: C. It enforces referential integrity between tables.

Explanation: A foreign key constraint in a database enforces referential integrity by ensuring that data in one table corresponds to data in another table, typically linking the values in a column to the primary key of another table.

Recommended Courses
Certification in Full Stack Data Science and AI
20,000 people are doing this course
Become a job-ready Data Science professional in 30 weeks. Join the largest tech community in India. Pay only after you get a job above 5 LPA.
Masters Program in Data Science and Artificial Intelligence
20,000 people are doing this course
Join India's best Masters program in Data Science and Artificial Intelligence. Get the best jobs in top tech companies. Accredited by ECTS and globally recognised in EU, US, Canada and 60+ countries.

AlmaBetter’s curriculum is the best curriculum available online. AlmaBetter’s program is engaging, comprehensive, and student-centered. If you are honestly interested in Data Science, you cannot ask for a better platform than AlmaBetter.

Kamya Malhotra
Statistical Analyst
Fast forward your career in tech with AlmaBetter
Explore Courses

Vikash SrivastavaCo-founder & CPTO AlmaBetter

Vikas CTO

Related Tutorials to watch

view Allview-all

Top Articles toRead

view Allview-all
Made with heartin Bengaluru, India
  • Official Address
  • 4th floor, 133/2, Janardhan Towers, Residency Road, Bengaluru, Karnataka, 560025
  • Communication Address
  • 4th floor, 315 Work Avenue, Siddhivinayak Tower, 152, 1st Cross Rd., 1st Block, Koramangala, Bengaluru, Karnataka, 560034
  • Follow Us
  • facebookinstagramlinkedintwitteryoutubetelegram

© 2024 AlmaBetter