Blame

31bafd lisa 2026-06-08 11:43:19
C05: rebuild Data Dictionary page; fix class-diagram notation table - Rename 'Data Dictionary - Format is not Type' → 'Data Dictionary' (now a full page): when-to-use (data sources), 7 headings, worked student example, three videos (Kalodikis), Wikipedia data/metadata image (CC0), student-example activity, ScotRail extension; keeps the format-vs-type section. Updated 4 inbound links. - Class-diagram page: fix broken 'notation' table — the `<|--` cell contained a pipe that corrupted the markdown table; moved inheritance into prose. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1
> **DRAFT** — under teacher review.
2
3
# Data Dictionary
4
5
The Hamilton and Alexandra College · Year 12 · 2026
6
7
A data dictionary documents **every piece of data your software stores** — what each field is called, what type it is, how big it is, and what a valid value looks like. It is the design tool that turns "we'll store some student details" into a precise specification someone could actually build a database from.
8
9
---
10
11
## When do you use a data dictionary?
12
13
You use a data dictionary for your **data sources** — the data your software *stores and reads back*. In a real system that is almost always a **database**; in your SAT it might be a database, a file, or a structured collection in code. **If your solution stores data, it needs a data dictionary.**
14
15
The picture below shows the idea. The top table is the actual **data**; the bottom table is the **data dictionary** that describes it — the name of each column, its data type, its size, and what it means.
16
17
![A sample data table and the data dictionary (metadata) that describes each of its columns](Data%20Dictionary/data-dictionary-metadata.png)
18
19
The data dictionary is *metadata*: data about your data.
20
21
---
22
23
## Video 1 — What is a data dictionary?
24
25
**🎯 Watch for:** how every column in the stored data gets one row in the dictionary, and how the dictionary fixes the type and size of each field *before* any data is entered.
26
27
{{Video|src=https://www.youtube.com/watch?v=kH0bcw9P2Lc}}
28
29
> [!NOTE]
30
> This video (and the two below) are from an AU teacher pitched at NSW HSC Software Design & Development. The concept is identical to VCE — just note the course name differs.
31
32
---
33
34
## The headings to include
35
36
A strong data dictionary uses these columns:
37
38
| Heading | What it records |
39
|---|---|
40
| **Field name** | the variable / column name |
41
| **Data type** | Integer, Text, Boolean, Date/time, Float |
42
| **Data format** | the storage/display *pattern* (e.g. `999999`, `YYYY-MM-DD`) |
43
| **Size** | the maximum length |
44
| **Description** | what the field is for |
45
| **Example** | a sample valid value |
46
| **Validation** | the rule that keeps the value valid |
47
48
> [!TIP]
49
> **The three you can never leave out: field name, data type, description.** Size, format, example and validation make a dictionary *strong* — but a dictionary without name, type and description is not a dictionary at all.
50
51
---
52
53
## A worked example
54
55
Here is a data dictionary for the **student records** a school timetable app might store:
56
57
| Field name | Data type | Data format | Size | Description | Example | Validation |
58
|---|---|---|---|---|---|---|
59
| `studentID` | Integer | `999999` | 6 | Unique ID for each student | 123456 | Required; exactly 6 digits |
60
| `firstName` | Text | `Xxxxxxxxxx` | 50 | Student's given name | Jane | Required; letters only |
61
| `lastName` | Text | `Xxxxxxxxxx` | 50 | Student's family name | Smith | Required; letters only |
62
| `DOB` | Date/time | `YYYY-MM-DD` | 8 | Date of birth | 2009-07-19 | Required; valid date; not in the future |
63
| `yearLevel` | Integer | `NN` | 2 | Current year level | 11 | Required; between 7 and 12 |
64
| `email` | Text | `xxx@xxx` | 100 | School email for notifications | jsmith@hac.vic.edu.au | Required; valid email format |
65
| `isBoarder` | Boolean | `true/false` | 1 | Whether the student boards | false | Required; true or false |
66
67
Notice that **Data type** and **Data format** are two different columns — that is the trap in the next section.
68
69
---
70
71
## "Data format" is not "data type"
72
73
This is the single most common data-dictionary mistake.
74
75
**Data type** is the *kind* of data — Integer, Text, Boolean, Date/time, Float.
76
77
**Data format** is the *storage or display pattern* — the exact shape a valid value takes.
78
79
If you write `Integer` in the Format column, you have answered the wrong question. The format strings use a small set of symbols:
80
81
| Symbol | Meaning |
82
|---|---|
83
| `9` or `N` | one digit (0–9) |
84
| `X` | one uppercase letter |
85
| `x` | one lowercase letter |
86
| `YYYY` `MM` `DD` | four-digit year, two-digit month, two-digit day |
87
88
So `studentID` has type **Integer** but format `999999` ("exactly six digits"); `DOB` has type **Date/time** but format `YYYY-MM-DD` ("ISO date, not DD/MM/YYYY"). The type tells you *what kind*; the format tells you *what a valid value looks like*.
89
90
> [!TIP]
91
> External reference: [Ryan's Tutorials — Data Dictionary](https://ryanstutorials.net/software-design-and-development/data-dictionary.php) shows a "Format for Display" column with this N/X notation (AU, secondary-pitched).
92
93
---
94
95
## Video 2 — Data dictionaries in code
96
97
**🎯 Watch for:** how the same idea applies when the data lives inside a program (objects, structures), not just a database table.
98
99
{{Video|src=https://www.youtube.com/watch?v=MdMsjxT-EoU}}
100
101
---
102
103
## The VCAA levels
104
105
The level descriptors build upward:
106
107
- **Level 3** — reference to **data types** (Integer, Text, Boolean, Date/time, Float).
108
- **Level 5** — data types **and data structures** (arrays, records — not just single variables).
109
- **Level 7** — data types, data structures **and data sources** (where does each value come from: user input, a database, a calculation?).
110
111
You cannot skip levels — a dictionary with no data structures cannot reach Level 5.
112
113
---
114
115
## Activity — your turn
116
117
1. Build a data dictionary for the **student data your own system stores**. Use all seven headings above. Aim for at least five fields.
118
2. Then watch one student's attempt:
119
120
**🎯 Watch for:** which fields they included, and whether their Format column is really a format — or just a repeated data type.
121
122
{{Video|src=https://www.youtube.com/watch?v=xu0c1Dm9xWk}}
123
124
3. Write down: **what do you agree with, and what would you change?** Be specific — name the field and the column.
125
126
---
127
128
## Common mistakes
129
130
### Mistake 1: Format = Type
131
132
> ~~`Format: Integer`~~
133
134
Write the *pattern* instead: `999999`, `NN`, `YYYY-MM-DD`. If you cannot write a pattern, you have probably copied the Type column.
135
136
### Mistake 2: Missing data sources at Level 7
137
138
Every field at Level 7 needs a source — "user input", "calculated from `DOB`", "retrieved from the student database". Blank does not score.
139
140
### Mistake 3: Vague sizes
141
142
> ~~`Size: large`~~
143
144
Size is a **number** — the maximum characters or digits the field can hold.
145
146
---
147
148
## Check Your Understanding
149
150
1. What are the three headings every data dictionary must include?
151
152
>| **Field name, data type, and description.** Size, format, example and validation make it stronger, but those three are the minimum that makes it a data dictionary.
153
154
2. `email` has data type **Text**. What might its *format* be, and why is that different information?
155
156
>| A format such as `xxx@xxx` (or `name@domain`) shows the *shape* a valid email takes — text before an `@`, a domain after it. The type "Text" only says it is characters; the format says how those characters must be arranged.
157
158
3. Your dictionary lists variables and arrays but no data sources. Which VCAA level can you reach, and which is out of reach?
159
160
>| You can reach **Level 5** (types and structures). **Level 7** needs data sources as well — add a source for every field to unlock it.
161
162
---
163
164
## Extension — a data dictionary you can play with
165
166
ScotRail's station announcements are stitched together from a **database of pre-recorded phrases**. This tool lets you assemble your own announcement from those stored fragments:
167
168
- [ScotRail — assemble a sentence](https://scotrail.datasette.io/scotrail/assemble_sentence?terms=i+am+sorry%2C+scotrail%2C+from%2C+bath+spa%2C+is+delayed%2C+due+to%2C+bomb)
169
170
Try assembling a sentence, then think about how it works: each phrase is one **record** in a data source. If you wrote the data dictionary for that data source, what fields would it need — the phrase text? an audio-file reference? a category? That is the same design tool you just practised, behind a real system.
171
172
---
173
174
## Credits
175
176
- Data table / data-dictionary illustration — [mrAnmol](https://commons.wikimedia.org/wiki/User:MrAnmol), via Wikimedia Commons (CC0).
177
178
---
179
180
## See also
181
182
- [Object Descriptions and Class Diagrams](/sd/C05/Object%20Descriptions%20and%20Class%20Diagrams) — each class attribute is a data-dictionary field
183
- [IPO Charts — Process Means Steps](/sd/C05/IPO%20Charts%20-%20Process%20Means%20Steps)
184
- [VCAA Pseudocode — Not Python](/sd/C05/VCAA%20Pseudocode%20Not%20Python)
185
- [C05 Resources](/sd/Resources/C05-Resources)
186
187
← Back to [C05 Home](/sd/C05/C05-home) · [VCE Software Development Hub](/sd/VCE%20Software%20Development%20Hub)