Commit 31bafd
2026-06-08 11:43:19 lisa: 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>| sd/C05/C05-home.md .. | |
| @@ 12,7 12,7 @@ | |
| - [C04 → C05 — Choose, then Detail](/sd/C05/C04%20to%20C05%20-%20Choose%20then%20Detail) — how C05 (detail the chosen idea) differs from C04 (choose *which* idea); why C05 means "buildable", not "prettier" | |
| - [Sketch vs Mock-up](/sd/C05/Sketch%20vs%20Mock-up) — why a rough sketch is not a mock-up, and what "annotated" actually means (the 3–4 / 5–6 boundary) | |
| - | - [Data Dictionary — Format is not Type](/sd/C05/Data%20Dictionary%20-%20Format%20is%20not%20Type) — the most common data-dictionary error: the Format column is a storage/display pattern, not a synonym for data type |
| + | - [Data Dictionary](/sd/C05/Data%20Dictionary) — when to use it, the headings to include, a worked example, and why "format" is not "type" |
| - [IPO Charts — Process Means Steps](/sd/C05/IPO%20Charts%20-%20Process%20Means%20Steps) — why the Process column must be numbered algorithm steps, not a label for the output | |
| - [VCAA Pseudocode — Not Python](/sd/C05/VCAA%20Pseudocode%20Not%20Python) — write language-independent Structured English (`←`, `<>`, `ENDIF`), not Python-flavoured pseudocode | |
| - [Object Descriptions and Class Diagrams](/sd/C05/Object%20Descriptions%20and%20Class%20Diagrams) — the fifth design tool for OOP projects: a class's properties, methods and events, and how to read a class diagram (Level 7–9) | |
| sd/C05/Data Dictionary - Format is not Type.md .. /dev/null | |
| @@ 1,156 0,0 @@ | |
| - | > **DRAFT** — under teacher review. |
| - | |
| - | # Data Dictionary — "Format" Is Not "Type" |
| - | |
| - | The Hamilton and Alexandra College · Year 12 · 2026 |
| - | |
| - | The single most common data-dictionary error is writing a data **type** in the **Format** column. They are not the same thing. This page explains the difference, shows you what correct entries look like, and maps to the VCAA band descriptors. |
| - | |
| - | --- |
| - | |
| - | ## The core distinction |
| - | |
| - | **Type** is the *kind* of data — what category it belongs to. |
| - | |
| - | **Format** is the *storage or display pattern* — the exact shape the value takes. |
| - | |
| - | These are different answers to different questions: |
| - | |
| - | | Question | Column | Example answer | |
| - | |---|---|---| |
| - | | What kind of data is this? | **Type** | `Integer` | |
| - | | What does a valid value look like? | **Format** | `999999` (fixed 6 digits) | |
| - | |
| - | If you write `Integer` in the Format column, you have answered the wrong question. A marker sees that and knows you have conflated two concepts. |
| - | |
| - | --- |
| - | |
| - | ## Format notation key |
| - | |
| - | The format strings use a small set of symbols — memorise these: |
| - | |
| - | | Symbol | Meaning | |
| - | |---|---| |
| - | | `9` or `N` | One digit (0–9) | |
| - | | `X` | One uppercase letter | |
| - | | `x` | One lowercase letter | |
| - | | `YYYY` | Four-digit year | |
| - | | `MM` | Two-digit month | |
| - | | `DD` | Two-digit day | |
| - | | Separator (`,` `.` `-`) | Literal separator character | |
| - | |
| - | So `999999` means "exactly six digits". `Xxxxxxxxxxxxxxx` means "one uppercase letter followed by lowercase letters — the number of `x` characters shows the maximum length". |
| - | |
| - | --- |
| - | |
| - | ## Worked example — a complete data dictionary |
| - | |
| - | These rows come from a client-management system. Read across each row and notice that Type and Format sit in separate columns and say different things. |
| - | |
| - | | Field | Type | Size | Format | Example | |
| - | |---|---|---|---|---| |
| - | | `id` | Integer | 6 | `999999` | 201940 | |
| - | | `firstName` | Text | 50 | `Xxxxxxxxxxxxxxx` | Jane | |
| - | | `lastName` | Text | 50 | `Xxxxxxxxxxxxxxx` | Smith | |
| - | | `DOB` | Date/time | 8 | `YYYY-MM-DD` | 2001-07-19 | |
| - | | `clubMember` | Boolean | 1 | `true/false` | true | |
| - | | `memberYears` | Integer | 2 | `NN` | 6 | |
| - | | `sales` | FloatingPoint | 8 | `NN,NNN.NN` | 12,543.76 | |
| - | |
| - | Notice what each Format entry tells you that the Type alone does not: |
| - | |
| - | - `id` is an Integer — but the Format `999999` tells you it is always **6 digits**, not 1 or 2. |
| - | - `firstName` is Text — but `Xxxxxxxxxxxxxxx` tells you it starts with a **capital** and the rest are lowercase. |
| - | - `DOB` is Date/time — but `YYYY-MM-DD` fixes it to **ISO format**, not DD/MM/YYYY or MM-DD-YYYY. |
| - | - `sales` is FloatingPoint — but `NN,NNN.NN` specifies a **thousands separator** and exactly **2 decimal places**. |
| - | |
| - | --- |
| - | |
| - | ## Why Format matters |
| - | |
| - | Format entries do three jobs in your design documentation: |
| - | |
| - | - **Data consistency** — every value entered follows the same shape, so comparisons and sorting work correctly. |
| - | - **Validation** — your software can reject an entry that does not match the pattern (e.g., a date typed as `19-07-01` instead of `2001-07-19`). |
| - | - **Readability** — another developer reading your data dictionary can reproduce the exact storage structure without guessing. |
| - | |
| - | A Format column filled with type names (`Integer`, `String`, `Boolean`) gives you none of these benefits — it duplicates the Type column and adds no information. |
| - | |
| - | --- |
| - | |
| - | ## VCAA band levels — what's required at each step |
| - | |
| - | VCAA defines a data dictionary as specifying variables, arrays, and GUI objects with reference to data types, data structures, and data sources. The level descriptors build upward: |
| - | |
| - | | Level | What you must include | |
| - | |---|---| |
| - | | **Level 3** | Reference to **data types** (Integer, Text, Boolean, Date/time, FloatingPoint) | |
| - | | **Level 5** | Data types **and data structures** (arrays, records — not just scalar variables) | |
| - | | **Level 7** | Data types, data structures **and data sources** (where does each value come from — user input, database, calculation?) | |
| - | |
| - | You cannot skip levels. If your dictionary has no data structures, you cannot claim Level 5 or above. |
| - | |
| - | --- |
| - | |
| - | ## Common mistakes |
| - | |
| - | ### Mistake 1: Format = Type |
| - | |
| - | > ~~`Format: Integer`~~ |
| - | |
| - | Write the pattern instead: `999999`, `NN`, etc. If you cannot write a pattern, leave a note and revisit — but do not copy the Type column. |
| - | |
| - | ### Mistake 2: Missing data sources at Level 7 |
| - | |
| - | > ~~(no Source column, or Source column left blank for half the rows)~~ |
| - | |
| - | Every field at Level 7 needs a source. "User input", "calculated from `sales` total", "retrieved from customer database" — these are all valid. Blank is not. |
| - | |
| - | ### Mistake 3: Vague sizes |
| - | |
| - | > ~~`Size: large`~~ |
| - | |
| - | Size must be a number — the number of characters, bytes, or digits the field can hold. If you do not know, look at your data (the longest plausible value) and choose a round number that covers it. |
| - | |
| - | ### Mistake 4: Only scalar variables |
| - | |
| - | A dictionary that lists only individual variables but no arrays or records cannot score Level 5 or above. If your design uses a list of items or a record structure, include it. |
| - | |
| - | --- |
| - | |
| - | ## 🎬 Watch |
| - | |
| - | > [!NOTE] |
| - | > Video coming soon. |
| - | |
| - | **🎯 Watch for:** how an experienced developer reads a Format string and immediately knows the exact shape of valid data — something the Type alone can never tell you. |
| - | |
| - | --- |
| - | |
| - | ## Check Your Understanding |
| - | |
| - | 1. A student writes `Text` in the Format column for a `lastName` field. What is the mistake, and what should they write instead? |
| - | |
| - | >| ### Answer |
| - | >| `Text` is a **type**, not a format. It duplicates the Type column and adds nothing. The correct Format entry is `Xxxxxxxxxxxxxxx` — one uppercase letter followed by lowercase letters, with the number of `x` characters indicating maximum length (e.g. 15 for a 15-character maximum). |
| - | |
| - | 2. Your data dictionary has variables and arrays but no data sources. Which VCAA level can you reach, and which is out of reach? |
| - | |
| - | >| ### Answer |
| - | >| You can reach **Level 5** (data types and data structures). **Level 7** is out of reach because it requires data sources as well. Add a Source column and fill it in for every row to unlock Level 7. |
| - | |
| - | 3. What does the Format string `NN,NNN.NN` tell you that the Type `FloatingPoint` does not? |
| - | |
| - | >| ### Answer |
| - | >| It tells you the value uses a **thousands separator** (`,`) and is stored to exactly **two decimal places**. `FloatingPoint` alone does not specify either of these — you could have `12543.7` or `12,543.759` and both would be valid floats, but only `12,543.76` matches the format. |
| - | |
| - | --- |
| - | |
| - | ## See also |
| - | |
| - | - [IPO Charts — Process Means Steps](/sd/C05/IPO%20Charts%20-%20Process%20Means%20Steps) |
| - | - [Sketch vs Mock-up](/sd/C05/Sketch%20vs%20Mock-up) |
| - | - [Ryan's Tutorials — Data Dictionary](https://ryanstutorials.net/software-design-and-development/data-dictionary.php) — AU secondary-pitched; shows a "Format for Display" column with N/X notation |
| - | - [C05 Resources](/sd/Resources/C05-Resources) |
| - | |
| - | ← Back to [C05 Home](/sd/C05/C05-home) · [VCE Software Development Hub](/sd/VCE%20Software%20Development%20Hub) |
| /dev/null .. sd/C05/Data Dictionary.md | |
| @@ 0,0 1,187 @@ | |
| + | > **DRAFT** — under teacher review. |
| + | |
| + | # Data Dictionary |
| + | |
| + | The Hamilton and Alexandra College · Year 12 · 2026 |
| + | |
| + | 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. |
| + | |
| + | --- |
| + | |
| + | ## When do you use a data dictionary? |
| + | |
| + | 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.** |
| + | |
| + | 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. |
| + | |
| + |  |
| + | |
| + | The data dictionary is *metadata*: data about your data. |
| + | |
| + | --- |
| + | |
| + | ## Video 1 — What is a data dictionary? |
| + | |
| + | **🎯 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. |
| + | |
| + | {{Video|src=https://www.youtube.com/watch?v=kH0bcw9P2Lc}} |
| + | |
| + | > [!NOTE] |
| + | > 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. |
| + | |
| + | --- |
| + | |
| + | ## The headings to include |
| + | |
| + | A strong data dictionary uses these columns: |
| + | |
| + | | Heading | What it records | |
| + | |---|---| |
| + | | **Field name** | the variable / column name | |
| + | | **Data type** | Integer, Text, Boolean, Date/time, Float | |
| + | | **Data format** | the storage/display *pattern* (e.g. `999999`, `YYYY-MM-DD`) | |
| + | | **Size** | the maximum length | |
| + | | **Description** | what the field is for | |
| + | | **Example** | a sample valid value | |
| + | | **Validation** | the rule that keeps the value valid | |
| + | |
| + | > [!TIP] |
| + | > **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. |
| + | |
| + | --- |
| + | |
| + | ## A worked example |
| + | |
| + | Here is a data dictionary for the **student records** a school timetable app might store: |
| + | |
| + | | Field name | Data type | Data format | Size | Description | Example | Validation | |
| + | |---|---|---|---|---|---|---| |
| + | | `studentID` | Integer | `999999` | 6 | Unique ID for each student | 123456 | Required; exactly 6 digits | |
| + | | `firstName` | Text | `Xxxxxxxxxx` | 50 | Student's given name | Jane | Required; letters only | |
| + | | `lastName` | Text | `Xxxxxxxxxx` | 50 | Student's family name | Smith | Required; letters only | |
| + | | `DOB` | Date/time | `YYYY-MM-DD` | 8 | Date of birth | 2009-07-19 | Required; valid date; not in the future | |
| + | | `yearLevel` | Integer | `NN` | 2 | Current year level | 11 | Required; between 7 and 12 | |
| + | | `email` | Text | `xxx@xxx` | 100 | School email for notifications | jsmith@hac.vic.edu.au | Required; valid email format | |
| + | | `isBoarder` | Boolean | `true/false` | 1 | Whether the student boards | false | Required; true or false | |
| + | |
| + | Notice that **Data type** and **Data format** are two different columns — that is the trap in the next section. |
| + | |
| + | --- |
| + | |
| + | ## "Data format" is not "data type" |
| + | |
| + | This is the single most common data-dictionary mistake. |
| + | |
| + | **Data type** is the *kind* of data — Integer, Text, Boolean, Date/time, Float. |
| + | |
| + | **Data format** is the *storage or display pattern* — the exact shape a valid value takes. |
| + | |
| + | If you write `Integer` in the Format column, you have answered the wrong question. The format strings use a small set of symbols: |
| + | |
| + | | Symbol | Meaning | |
| + | |---|---| |
| + | | `9` or `N` | one digit (0–9) | |
| + | | `X` | one uppercase letter | |
| + | | `x` | one lowercase letter | |
| + | | `YYYY` `MM` `DD` | four-digit year, two-digit month, two-digit day | |
| + | |
| + | 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*. |
| + | |
| + | > [!TIP] |
| + | > 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). |
| + | |
| + | --- |
| + | |
| + | ## Video 2 — Data dictionaries in code |
| + | |
| + | **🎯 Watch for:** how the same idea applies when the data lives inside a program (objects, structures), not just a database table. |
| + | |
| + | {{Video|src=https://www.youtube.com/watch?v=MdMsjxT-EoU}} |
| + | |
| + | --- |
| + | |
| + | ## The VCAA levels |
| + | |
| + | The level descriptors build upward: |
| + | |
| + | - **Level 3** — reference to **data types** (Integer, Text, Boolean, Date/time, Float). |
| + | - **Level 5** — data types **and data structures** (arrays, records — not just single variables). |
| + | - **Level 7** — data types, data structures **and data sources** (where does each value come from: user input, a database, a calculation?). |
| + | |
| + | You cannot skip levels — a dictionary with no data structures cannot reach Level 5. |
| + | |
| + | --- |
| + | |
| + | ## Activity — your turn |
| + | |
| + | 1. Build a data dictionary for the **student data your own system stores**. Use all seven headings above. Aim for at least five fields. |
| + | 2. Then watch one student's attempt: |
| + | |
| + | **🎯 Watch for:** which fields they included, and whether their Format column is really a format — or just a repeated data type. |
| + | |
| + | {{Video|src=https://www.youtube.com/watch?v=xu0c1Dm9xWk}} |
| + | |
| + | 3. Write down: **what do you agree with, and what would you change?** Be specific — name the field and the column. |
| + | |
| + | --- |
| + | |
| + | ## Common mistakes |
| + | |
| + | ### Mistake 1: Format = Type |
| + | |
| + | > ~~`Format: Integer`~~ |
| + | |
| + | Write the *pattern* instead: `999999`, `NN`, `YYYY-MM-DD`. If you cannot write a pattern, you have probably copied the Type column. |
| + | |
| + | ### Mistake 2: Missing data sources at Level 7 |
| + | |
| + | Every field at Level 7 needs a source — "user input", "calculated from `DOB`", "retrieved from the student database". Blank does not score. |
| + | |
| + | ### Mistake 3: Vague sizes |
| + | |
| + | > ~~`Size: large`~~ |
| + | |
| + | Size is a **number** — the maximum characters or digits the field can hold. |
| + | |
| + | --- |
| + | |
| + | ## Check Your Understanding |
| + | |
| + | 1. What are the three headings every data dictionary must include? |
| + | |
| + | >| **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. |
| + | |
| + | 2. `email` has data type **Text**. What might its *format* be, and why is that different information? |
| + | |
| + | >| 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. |
| + | |
| + | 3. Your dictionary lists variables and arrays but no data sources. Which VCAA level can you reach, and which is out of reach? |
| + | |
| + | >| You can reach **Level 5** (types and structures). **Level 7** needs data sources as well — add a source for every field to unlock it. |
| + | |
| + | --- |
| + | |
| + | ## Extension — a data dictionary you can play with |
| + | |
| + | 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: |
| + | |
| + | - [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) |
| + | |
| + | 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. |
| + | |
| + | --- |
| + | |
| + | ## Credits |
| + | |
| + | - Data table / data-dictionary illustration — [mrAnmol](https://commons.wikimedia.org/wiki/User:MrAnmol), via Wikimedia Commons (CC0). |
| + | |
| + | --- |
| + | |
| + | ## See also |
| + | |
| + | - [Object Descriptions and Class Diagrams](/sd/C05/Object%20Descriptions%20and%20Class%20Diagrams) — each class attribute is a data-dictionary field |
| + | - [IPO Charts — Process Means Steps](/sd/C05/IPO%20Charts%20-%20Process%20Means%20Steps) |
| + | - [VCAA Pseudocode — Not Python](/sd/C05/VCAA%20Pseudocode%20Not%20Python) |
| + | - [C05 Resources](/sd/Resources/C05-Resources) |
| + | |
| + | ← Back to [C05 Home](/sd/C05/C05-home) · [VCE Software Development Hub](/sd/VCE%20Software%20Development%20Hub) |
| /dev/null .. sd/C05/Data Dictionary/data-dictionary-metadata.png | |
| sd/C05/IPO Charts - Process Means Steps.md .. | |
| @@ 155,7 155,7 @@ | |
| ## See also | |
| - [VCAA Pseudocode — Not Python](/sd/C05/VCAA%20Pseudocode%20Not%20Python) — turn each IPO Process column into formal pseudocode | |
| - | - [Data Dictionary — Format is not Type](/sd/C05/Data%20Dictionary%20-%20Format%20is%20not%20Type) |
| + | - [Data Dictionary](/sd/C05/Data%20Dictionary) |
| - [Sketch vs Mock-up](/sd/C05/Sketch%20vs%20Mock-up) | |
| ← Back to [C05 Home](/sd/C05/C05-home) · [VCE Software Development Hub](/sd/VCE%20Software%20Development%20Hub) | |
| sd/C05/Object Descriptions and Class Diagrams.md .. | |
| @@ 59,7 59,8 @@ | |
| | `age : int` | An **attribute** and its **data type** | | |
| | `isMammal()` | A **method** (an action the object can perform) | | |
| | `isUpcoming() : bool` | A method and its **return type** | | |
| - | | `Animal <|-- Duck` | **Inheritance** — "Duck *is a* Animal" | |
| + | |
| + | **Relationships** are shown with arrows between classes. The inheritance arrow `<|--` means *"is a kind of"* — writing `Animal <|-- Duck` says **Duck is a kind of Animal**, so Duck inherits all of Animal's attributes and methods and then adds its own. (Two others you may meet: *composition* `*--`, "is made of", and *association* `-->`, "uses".) |
| > [!TIP] | |
| > Every attribute should have a **data type** and every method should show its **parameters and return type**. "`age`" alone is weak; "`+ age : int`" is design-ready. This is exactly the precision that lifts C5-1 from the middle bands into 7–9. | |
| @@ 86,7 87,7 @@ | |
| The object description is not an island — it ties the whole detailed design together: | |
| - | - **Properties ↔ data dictionary.** Every attribute is a field. `studentID : int` becomes a data-dictionary row with a type, size and format. See [Data Dictionary — Format is not Type](/sd/C05/Data%20Dictionary%20-%20Format%20is%20not%20Type). |
| + | - **Properties ↔ data dictionary.** Every attribute is a field. `studentID : int` becomes a data-dictionary row with a type, size and format. See [Data Dictionary](/sd/C05/Data%20Dictionary). |
| - **Methods ↔ pseudocode.** At Level 9 you write pseudocode for each method. The `is_passing()` example on the pseudocode page is exactly a method from a class diagram, written out. See [VCAA Pseudocode — Not Python](/sd/C05/VCAA%20Pseudocode%20Not%20Python). | |
| - **Classes ↔ mock-ups and IPO charts.** The objects are what sit *behind* your screens and processes. | |
| @@ 141,7 142,7 @@ | |
| ## See also | |
| - [VCAA Pseudocode — Not Python](/sd/C05/VCAA%20Pseudocode%20Not%20Python) — write the pseudocode for each method (Level 9) | |
| - | - [Data Dictionary — Format is not Type](/sd/C05/Data%20Dictionary%20-%20Format%20is%20not%20Type) — each attribute is a data-dictionary field |
| + | - [Data Dictionary](/sd/C05/Data%20Dictionary) — each attribute is a data-dictionary field |
| - [Sketch vs Mock-up](/sd/C05/Sketch%20vs%20Mock-up) | |
| - [C05 Resources](/sd/Resources/C05-Resources) | |
| sd/C05/Sketch vs Mock-up.md .. | |
| @@ 125,7 125,7 @@ | |
| - [Annotated Mock-up in Excalidraw](/sd/C05/Annotated%20Mock-up%20in%20Excalidraw) | |
| - [C04 → C05 — Choose, then Detail](/sd/C05/C04%20to%20C05%20-%20Choose%20then%20Detail) | |
| - | - [Data Dictionary — Format is not Type](/sd/C05/Data%20Dictionary%20-%20Format%20is%20not%20Type) |
| + | - [Data Dictionary](/sd/C05/Data%20Dictionary) |
| - [Design Principles vs UX Characteristics](/sd/C05/Design%20Principles%20vs%20UX%20Characteristics) | |
| --- | |
