Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
When architecting a backend system, one early structural question gets underestimated: does this table own its identity, or does it borrow one? Strong and weak entity design sits at the heart of that question—and getting it wrong early compounds into painful refactoring later.
According to GeeksforGeeks’ reference on strong and weak entities, this distinction is one of the most foundational concepts in relational database modeling. If you’re new to ERD notation, our guide on Entity Relationship Diagram basics covers the visual language from scratch.
A strong entity is self-contained. It holds a primary key drawn entirely from its own attributes. An Employee record exists the moment it’s inserted. No external reference needed.
A weak entity can’t identify itself alone. It borrows part of its identity from a parent record. Remove that parent, and the child loses its reason to exist. This isn’t a flaw—it’s intentional modeling that reflects a real-world dependency.
| Metric | Strong Entity | Weak Entity |
|---|---|---|
| Independence | Exists on its own | Requires a parent record |
| Primary Key | Standalone (UUID, integer) | Composite: partial key + parent key |
| ERD Symbol | Single rectangle | Double-lined rectangle |
| Relationship | Standard diamond | Double-diamond (identifying) |
| On Parent Delete | Unaffected | Removed via ON DELETE CASCADE |
To understand strong and weak entity behavior in practice, consider an HR system where employees register family members for insurance. Employee is the strong entity. Dependent is the weak one.
+------------------+ ======================
| EMPLOYEE | || DEPENDENT ||
+------------------+ ======================
| PK: emp_id | || PK/FK: emp_id ||
| first_name | || PK: dep_name ||
| email | || birth_date||
+------------------+ ======================
CREATE TABLE employee (
emp_id VARCHAR(36) PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL
);
A new hire gets a record immediately—no dependents required.
dep_name alone isn’t globally unique. Two employees might both list a dependent named “Alex.” Within one employee’s household, though, the name is distinguishing. The database resolves this through a composite key: (emp_id, dep_name).
CREATE TABLE dependent (
emp_id VARCHAR(36),
dep_name VARCHAR(100),
birth_date DATE NOT NULL,
PRIMARY KEY (emp_id, dep_name),
FOREIGN KEY (emp_id)
REFERENCES employee(emp_id)
ON DELETE CASCADE
);
ON DELETE CASCADE is essential here. When an employee leaves, their dependents go too. Orphaned rows in a benefits table create integrity problems and messy audit reports. For a full breakdown of how cascade options behave, PostgreSQL’s official foreign key documentation is worth bookmarking.
| Entity | Attribute | Type | Key Role |
|---|---|---|---|
| Employee | emp_id | VARCHAR | Primary Key |
| Employee | VARCHAR | Unique Alternate Key | |
| Dependent | emp_id | VARCHAR | Foreign Key + Composite PK |
| Dependent | dep_name | VARCHAR | Partial Key + Composite PK |
For key selection strategies in general, our post on Primary Key vs Foreign Key goes deeper on surrogate vs natural key tradeoffs.
A poorly scoped deletion can quietly wipe dependent records. Document why the cascade exists, not just that it does.
A Building → Room → Desk chain produces composite keys that grow unwieldy fast. Beyond one level of nesting, introduce a synthetic key at each level instead.
Using an employee’s email inside a dependent’s composite key is a gamble. Emails change. Use surrogate keys for anything participating in a relationship.
A Customer may have many Orders, but an Order represents a completed transaction—it should survive even if the customer account is deleted. Not every one-to-many relationship is a strong and weak entity relationship.
When a weak entity’s composite key grows to three or more columns, drop it. Assign a UUID as a synthetic primary key and enforce uniqueness on the dependent columns via a UNIQUE constraint. Same business logic, far cleaner joins.
Weak entities require joining back to their parent constantly. A composite index on (emp_id, dep_name) prevents read costs from accumulating at scale.
Hard deletes with cascades destroy historical records. An is_deleted flag or deleted_at timestamp hides inactive rows from application logic while keeping them available for audits.
Can a weak entity have a primary key? Not on its own. Its partial key only becomes valid when combined with the parent’s identifier in a composite key.
What is an identifying relationship in a strong and weak entity ERD? It’s the bond linking a weak entity to its parent—shown as a double-lined diamond. It participates in the child’s identification, not just its association.
Can a weak entity become a strong entity? Yes. Add a synthetic unique identifier such as a UUID. Whether that conversion is appropriate depends on whether the real-world concept is genuinely dependent or not.
What happens when a strong entity row is deleted? With ON DELETE CASCADE configured, all linked weak entity rows are removed automatically. Without it, the foreign key constraint blocks the deletion entirely.
How do ORMs handle strong and weak entity mapping? Tools like Hibernate use @Embeddable keys and cascade annotations. The abstraction can obscure what’s happening at the SQL layer—worth understanding the relational model before leaning on the ORM fully. Our breakdown of Hibernate cascade types covers this in detail.
Understanding the difference between a strong and weak entity isn’t just textbook knowledge—it shapes key design, cascade behavior, indexing strategy, and how gracefully a schema handles edge cases. The real skill is knowing when a concept genuinely depends on another for its existence versus when it merely relates to one. Model that distinction carefully early, and problems surface while they’re still cheap to fix.