diff --git a/app/models.py b/app/models.py
index 4eb7af5d54e60d8f4232cfbaaf1b7b86efa3ef2a..2de41f1a98ccca242731a7fc1ad72ca4bfe14bc5 100644
--- a/app/models.py
+++ b/app/models.py
@@ -487,7 +487,11 @@ class Interface(db.Model):
     mac_id = db.Column(db.Integer, db.ForeignKey('mac.id'))
     host_id = db.Column(db.Integer, db.ForeignKey('host.id'))
 
-    cnames = db.relationship('Cname', backref='interface')
+    # Add delete and delete-orphan options to automatically delete cnames when:
+    # - deleting an interface
+    # - de-associating a cname (removing it from the interface.cnames list)
+    cnames = db.relationship('Cname', backref='interface',
+                             cascade='all, delete, delete-orphan')
     tags = db.relationship('Tag', secondary=interfacetags_table, lazy='subquery',
                            backref=db.backref('interfaces', lazy=True))
 
diff --git a/app/network/views.py b/app/network/views.py
index 0caaa91866c69182e7df93332553d0eb203cfe38..a14be57fc6e6641ce7c0644bc2d844ab63418eaa 100644
--- a/app/network/views.py
+++ b/app/network/views.py
@@ -160,8 +160,10 @@ def edit_interface(name):
         for (index, cname) in enumerate(interface.cnames):
             if cname.name not in new_cnames_string:
                 current_app.logger.debug(f'Deleting cname: {cname}')
-                interface.cnames.pop(index)
-                db.session.delete(cname)
+                # Removing the cname from interface.cnames list will
+                # delete it from the database due to the cascade
+                # delete-orphan option defined on the model
+                del interface.cnames[index]
         # Add new cnames
         for name in new_cnames_string:
             if name not in cnames_string:
@@ -189,6 +191,9 @@ def edit_interface(name):
 def delete_interface():
     interface = models.Interface.query.get_or_404(request.form['interface_id'])
     hostname = interface.host.name
+    # Deleting the interface will also delete all
+    # associated cnames due to the cascade delete option
+    # defined on the model
     db.session.delete(interface)
     db.session.commit()
     flash(f'Interface {interface.name} has been deleted', 'success')