Identifying Entities and Attributes: The Building Blocks of Database Design

Before a single table is created, conceptual design requires identifying which real-world things a database needs to represent and what details about each one actually matter. This article explains what qualifies as an entity, how to identify the attributes that describe it, the different types of attributes that appear in practice, and how choosing an appropriate identifying key shapes the rest of the design.

Database EntityAttribute TypesEntity Key

~5 min read · Updated Sep 8, 2026

What Counts as an Entity

An Entity is a distinct real-world object, concept, or event that a database needs to store information about — a customer, a product, an order, or an appointment are all typical entities. Identifying entities is the first step of the conceptual design phase discussed earlier in this series, and it requires asking a simple but important question: what are the "things" this application needs to keep track of?

Example entities for an online bookstore:
- Book
- Author
- Customer
- Order
- Publisher

Each entity eventually becomes a table, but at this early stage the goal is simply to identify the distinct concepts involved, without yet worrying about columns, data types, or SQL syntax.

Attributes: Describing an Entity's Details

An Attribute is a specific piece of information that describes an entity. A Book entity, for example, might have attributes like title, publication year, and price — each of these eventually becomes a column in the corresponding table.

Book entity and its attributes:
- title
- isbn
- publication_year
- price
- page_count

A common mistake at this stage is including too many or too few attributes: omitting an attribute the application will genuinely need forces a difficult schema change later, discussed earlier in this series regarding the cost of late design fixes, while including irrelevant attributes clutters the design and can create genuine confusion about what each piece of data actually represents.

Types of Attributes

Attributes are not all the same kind of thing, and recognizing these distinctions helps identify design problems early.

Simple Versus Composite Attributes

A Simple Attribute cannot be meaningfully broken down further, such as a page count. A Composite Attribute is made up of smaller, meaningful parts, such as an address, which naturally decomposes into street, city, and postal code.

Composite attribute example:
address → street, city, state, postal_code

Whether to store these as one combined field or
several separate columns depends on whether the
application needs to query or sort by the individual
parts — if city-based searches are needed, the
address should be split into separate columns

Single-Valued Versus Multi-Valued Attributes

A Single-Valued Attribute holds exactly one value per entity, such as a book's ISBN. A Multi-Valued Attribute can hold several values for a single entity, such as a book potentially having multiple authors. Multi-valued attributes cannot be stored directly as a single column in a relational table without violating good design principles, and instead require a separate related table — a technique explored in depth in the article on relationships later in this series.

Stored Versus Derived Attributes

A Stored Attribute holds a value that must be explicitly saved, such as a birth date. A Derived Attribute can be calculated from other stored attributes whenever needed, such as age, which can always be computed from a stored birth date.

Derived attribute example:
age = current_date - birth_date

Storing "age" directly as a column would create
redundant data that becomes stale the moment time
passes, since it must be manually updated to stay
correct — storing only birth_date and computing age
on demand avoids this inconsistency risk entirely

As a general design principle, derived attributes should usually not be stored directly, since doing so introduces a redundant value that can silently become inconsistent with the data it was derived from, unless performance requirements specifically justify the trade-off.

Choosing a Key: Uniquely Identifying Each Entity Instance

Every entity needs a way to uniquely distinguish one instance from another — this becomes the table's primary key, introduced earlier in this series. Choosing an appropriate key is one of the more consequential decisions in entity design.

Natural Keys Versus Surrogate Keys

A Natural Key is an attribute that already exists in the real-world data and happens to be unique, such as an ISBN for a book or a national ID number for a person. A Surrogate Key is an artificial identifier, typically an auto-incrementing number, created solely for the purpose of uniquely identifying rows, with no real-world meaning of its own.

Natural key example:
isbn as the primary key for a books table

Surrogate key example:
book_id (an auto-incrementing integer)
as the primary key, with isbn stored as
a separate, non-key attribute

Surrogate keys are generally preferred in practice, even when a natural key exists, because natural keys can occasionally change (a person's national ID might be reissued, or a product's code might be revised), and any change to a primary key value ripples through every foreign key referencing it elsewhere in the database — a surrogate key, having no external meaning, never needs to change for business reasons.

Why Careful Entity and Attribute Identification Matters

The entities and attributes identified during this early conceptual phase directly become the tables and columns of the eventual database schema. A mistake here — merging two distinct entities into one, missing an important attribute, or choosing a poor key — tends to cascade through every later design decision, making this careful, deliberate identification work one of the highest-leverage steps in the entire database design process discussed throughout this series.

Written & researched by Dr. Shahin Siami

Related Articles

Database Design in the Age of Generative AI

Generative AI tools can now draft schemas, suggest normalization fixes, and even write complex SQL from a plain-language description, changing how database design work actually happens day to day. This article explains where AI genuinely helps in the database design process, why human judgment remains essential for validating AI-generated schemas, and how vector databases have emerged as a new category built specifically to support AI-powered applications.

Continue

Database Security and Optimization: Access Control and Indexing

A well-normalized database schema is only part of a production-ready system; controlling who can access which data and ensuring queries run efficiently are equally essential. This article covers the fundamentals of database access control including roles and permissions, explains how indexes dramatically speed up queries, and introduces basic query optimization principles every database user should understand.

Continue

Database Normalization: From 1NF to BCNF, Explained with Examples

Normalization is the formal process of structuring database tables to eliminate redundancy and prevent the data inconsistencies that redundancy causes. This comprehensive guide explains the anomalies that motivate normalization, walks through the first three normal forms with concrete examples, covers Boyce-Codd Normal Form as a stricter refinement, and discusses the practical trade-off between full normalization and performance.

Continue

Modeling Relationships: One-to-Many, Many-to-Many, and Entity-Relationship Diagrams

Entities alone are not enough to model a real-world domain; the connections between them carry just as much meaning as the entities themselves. This article explains the concept of cardinality, walks through the three fundamental relationship types found in every relational database, and introduces entity-relationship diagrams as the standard visual tool for planning these connections before implementation.

Continue

An Overview of Database Design: Goals, Process, and Key Phases

Writing SQL queries is only half the picture; designing a database well before writing any queries at all determines whether that database will remain reliable, efficient, and maintainable as an application grows. This article explains the core goals every database design should pursue, walks through the overall design process from requirements to implementation, and introduces the key phases every well-designed database passes through.

Continue

Connecting Tables: JOINs and More Essential SQL

The real power of a relational database emerges when data is split across multiple related tables instead of being duplicated everywhere. This article explains why splitting data across tables avoids redundancy, covers the foreign key relationship that connects tables together, walks through the different types of JOIN used to query across related tables, and introduces a few more SQL techniques for managing table structure and data safely.

Continue