Blame
|
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 |  |
|||||||
| 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) |
|||||||
