Project Manager: Learning Objectives¶
This page checks my Project Manager app (a Django board / list / card
task manager, in roberts/csci.2026/project_manager/project-manager)
against two sources:
the 31 competency topics, and
the 46 Learning Objectives/Outcomes in the syllabus.
The syllabus list includes every competency topic, but it splits some of them in two (for example LIKE and GLOB Clauses is listed as LIKE Clause and GLOB Clause). It also adds ten objectives that are not on the competency list. So the main table below follows the syllabus, and the Comp. # column shows which competency topic each row belongs to (”—” means it is in the syllabus only).
Note
The project never writes SQL by hand. All SQL comes from the Django ORM
(models, migrations and querysets). Where a row says an objective is
reached, the SQL quoted is what Django actually generates. I got it from
python manage.py sqlmigrate boards 0001 and by printing queryset.query.
Summary¶
Source |
Reached |
Partly reached |
Not reached |
|---|---|---|---|
Syllabus objectives (46) |
25 |
5 |
16 |
Competency topics (31) |
15 |
4 |
12 |
A competency topic that pairs two items (for example GROUP BY and HAVING) counts as partly reached when the project covers only one of them.
Objectives the Project Reaches¶
Objective |
Comp. # |
Status |
Where in the project |
|---|---|---|---|
Normalization |
— |
Reached |
|
API Interface |
— |
Reached |
|
Data Type |
1 |
Reached |
|
CREATE Database |
— |
Reached |
|
CREATE Table |
— |
Reached |
|
INSERT Query |
— |
Reached |
|
SELECT Query |
— |
Reached |
Every page reads data, for example |
Operators |
4 |
Reached |
Comparison: |
Expressions |
5 |
Reached |
The CHECK expression |
WHERE Clause |
6 |
Reached |
Every |
AND & OR Operators |
7 |
Partly |
AND is used: |
UPDATE Query |
— |
Reached |
|
DELETE Query |
— |
Reached |
|
LIMIT Clause |
9 |
Reached |
|
ORDER BY Clause |
9 |
Reached |
|
Functions |
10 |
Reached |
The aggregate functions |
GROUP BY Clause |
11 |
Reached |
|
DISTINCT Keyword |
12 |
Reached |
|
Constraints |
14 |
Reached |
The migration creates |
JOINS |
15 |
Reached |
|
NULL Values |
17 |
Reached |
|
ALIAS Syntax |
18 |
Reached |
|
Transactions |
25 |
Reached |
|
AUTO INCREMENT |
27 |
Reached |
Every table’s |
Injection |
28 |
Reached |
It is prevented: the ORM sends values as bound parameters and never
pastes them into the SQL text. |
Date & Time |
30 |
Reached |
|
DBMS Commands |
— |
Partly |
Django management commands drive the database: |
Syntax |
— |
Partly |
Correct SQL syntax is produced for CREATE, SELECT, INSERT, UPDATE and DELETE, but Django generates all of it. None of it is written by hand. |
Indexes |
20 |
Partly |
The migration creates |
Hierarchical |
31 |
Partly |
The data is a fixed four-level hierarchy: user → board → list → card.
Lookups walk it with |
Objectives the Project Does Not Reach¶
Objective |
Comp. # |
Why not / how it could be added |
|---|---|---|
ATTACH Database |
2 |
The project only uses one database file, |
DETACH Database |
2 |
No database is ever attached, so there is nothing to detach. |
DROP Table |
3 |
There is only one migration and no table has been removed yet. |
LIKE Clause |
8 |
There is no search. A card search box using |
GLOB Clause |
8 |
Not used. Django has no lookup that generates |
HAVING Clause |
11 |
|
PRAGMA |
13 |
The project issues no PRAGMA statements. (Django turns on
|
UNION Clause |
16 |
No query combines two result sets. |
Triggers |
19 |
Card positions are kept in order by Python code ( |
INDEXED BY Clause |
21 |
No query forces a particular index. |
ALTER TABLE Command |
22 |
The schema has never changed after |
TRUNCATE TABLE Command |
23 |
Never used. (SQLite has no |
Views |
24 |
There are no SQL views. Django’s “views” ( |
Subqueries |
26 |
Related data is loaded with separate prefetch queries and joins, not
nested |
EXPLAIN |
29 |
No query plan is ever examined. |
VACUUM |
29 |
The database file is never compacted. |
Competency Topics at a Glance¶
Status |
Competency topics |
|---|---|
Reached (15) |
1 Data Type, 4 Operators, 5 Expressions, 6 WHERE, 9 LIMIT and ORDER BY, 10 Functions, 12 DISTINCT, 14 Constraints, 15 JOINS, 17 NULL Values, 18 ALIAS, 25 Transactions, 27 AUTO INCREMENT, 28 Injection, 30 Date and Time |
Partly (4) |
7 AND and OR (only AND), 11 GROUP BY and HAVING (only GROUP BY), 20 Indexes (only automatic ones), 31 Hierarchical (fixed hierarchy, no recursive query) |
Not reached (12) |
2 ATTACH and DETACH, 3 DROP Table, 8 LIKE and GLOB, 13 PRAGMA, 16 UNION, 19 Triggers, 21 INDEXED BY, 22 ALTER TABLE, 23 TRUNCATE TABLE, 24 Views, 26 Subqueries, 29 EXPLAIN and VACUUM |