Joseph Potvin wrote:
Andrew and Charles, I'd appreciate comments and questions on the following. For reference, you could look at the attached CSV table in a spreadsheet. The purpose of the DWD data structure is to simultaneously optimize for simplicity (only one added character, which is pipe: '|'); compact storage (on a single row of a reference table); easy human auditability; fast processing; and a clean consistent structure that can be auto-adapted to any table.
The DWD Coordinate List looks like this:
INDEX|DATA|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|
|W1|COLUMNHEADER|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|
|W1.1|Function|1|7|13|19|25|
|W1.2|Attribute|2|8|14|20|26|
|W1.3|1960s-1970s|3|9|15|21|27|
|W1.4|1980s-1990s|4|10|16|22|28|
|W1.5|2000s-2010s|5|11|17|23|29|
|W1.6|2020s-2030s|6|12|18|24|30|
|T_W1.1|Communication Devices|1|
|T_W1.2|Wired|2|
|T_W1.3|Landline Phones|3|
|T_W1.4|Fax Machines|4|
|T_W1.5|ISDN/DSL; Fibre-Optic|5|
|T_W1.6|Multiplexed Fibre-Optic; Brain-Computer|6|
|T_W1.1|Communication Devices|7|
|T_W1.2|Wireless|8|
|T_W1.3|Radio; Television|9|
|T_W1.4|Wireless Phones|10|
|T_W1.5|Smartphones|11|
|T_W1.6|IoT; 5G/6G; Satellite Internet|12|
|T_W1.1|General-Purpose Computers|13|
|T_W1.2|Platform|14|
|T_W1.3|Mainframe Computers|15|
|T_W1.4|Desktop Computers|16|
|T_W1.5|Laptops/Tablets; Smartphones|17|
|T_W1.6|IoT; mRNA|18|
|T_W1.1|General-Purpose Computers|19|
|T_W1.2|Mobility|20|
|T_W1.3|Stationary|21|
|T_W1.4|Movable|22|
|T_W1.5|Mobile|23|
|T_W1.6|Ubiquitous; Ambient|24|
|T_W1.1|General-Purpose Computers|25|
|T_W1.2|Storage|26|
|T_W1.3|Magnetic Tapes|27|
|T_W1.4|Floppy Disks; CDs|28|
|T_W1.5|Flash Drives; Central Cloud|29|
|T_W1.6|ReRAM/3D-NAND Drives; IPFS Cloud; DNA|30|
The expanded DWD Array for that data is like this (which is easier to 'see' when right-justified):
|INDEX|DATA|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|
|W1|COLUMNHEADER|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|
|W1.1|Function|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|
|W1.2|Attribute|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|
|W1.3|1960s-1970s|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|
|W1.4|1980s-1990s|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|
|W1.5|2000s-2010s|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|
|W1.6|2020s-2030s|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|
|T_W1.1|Communication Devices|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.2|Wired|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.3|Landline Phones|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.4|Fax Machines|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.5|ISDN/DSL; Fibre-Optic|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.6|Multiplexed Fibre-Optic; Brain-Computer|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.1|Communication Devices|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.2|Wireless|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.3|Radio; Television|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.4|Wireless Phones|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.5|Smartphones|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.6|IoT; 5G/6G; Satellite Internet|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.1|General-Purpose Computers|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.2|Platform|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.3|Mainframe Computers|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.4|Desktop Computers|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.5|Laptops/Tablets; Smartphones|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.6|IoT; mRNA|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.1|General-Purpose Computers|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.2|Mobility|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|
|T_W1.3|Stationary|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|
|T_W1.4|Movable|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|
|T_W1.5|Mobile|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|
|T_W1.6|Ubiquitous; Ambient|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|
|T_W1.1|General-Purpose Computers|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|
|T_W1.2|Storage|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|
|T_W1.3|Magnetic Tapes|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|
|T_W1.4|Floppy Disks; CDs|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|
|T_W1.5|Flash Drives; Central Cloud|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|
|T_W1.6|ReRAM/3D-NAND Drives; IPFS Cloud; DNA|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|
The CSV, shown below, would be difficult for a human to audit, especially if this table were much larger, because it's not obvious to distinguish secondary keys from values. Beyond a tiny table, it becomes just a data blob. By comparison, the DWD data structure is more intuitive and, with the API, would be faster for a computer to process.
Function,Attribute,1960s-1970s,1980s-1990s,2000s-2010s,2020s-2030s
Communication Devices,Wired,Landline Phones,Fax Machines,ISDN/DSL; Fibre-Optic,Multiplexed Fibre-Optic; Brain-Computer
Communication Devices,Wireless,Radio; Television,Wireless Phones,Smartphones,IoT; 5G/6G; Satellite Internet
General-Purpose Computers,Platform,Mainframe Computers,Desktop Computers,Laptops/Tablets; Smartphones,IoT; mRNA
General-Purpose Computers,Mobility,Stationary,Movable,Mobile,Ubiquitous; Ambient
General-Purpose Computers,Storage,Magnetic Tapes,Floppy Disks; CDs,Flash Drives; Central Cloud,ReRAM/3D-NAND Drives; IPFS Cloud; DNA
The SQL could look like this:
CREATE TABLE technology_categories (
id INT PRIMARY KEY,
category_name VARCHAR(50) NOT NULL
);
CREATE TABLE technology_attributes (
id INT PRIMARY KEY,
category_id INT,
attribute_name VARCHAR(50) NOT NULL,
FOREIGN KEY (category_id) REFERENCES technology_categories(id)
);
CREATE TABLE technology_evolution (
id INT PRIMARY KEY,
attribute_id INT,
era VARCHAR(20),
technologies TEXT,
FOREIGN KEY (attribute_id) REFERENCES technology_attributes(id)
);
With data:
sql
INSERT INTO technology_categories VALUES
(1, 'Communication Devices'),
(2, 'General-Purpose Computers');
INSERT INTO technology_attributes VALUES
(1, 1, 'Wired'),
(2, 1, 'Wireless'),
(3, 2, 'Platform'),
(4, 2, 'Mobility'),
(5, 2, 'Storage');
INSERT INTO technology_evolution VALUES
(1, 1, '1960s-1970s', 'Landline Phones'),
(2, 1, '1980s-1990s', 'Fax Machines'),
(3, 1, '2000s-2010s', 'ISDN/DSL; Fibre-Optic'),
(4, 1, '2020s-2030s', 'Multiplexed Fibre-Optic; Brain-Computer'),
(5, 2, '1960s-1970s', 'Radio; Television'),
(6, 2, '1980s-1990s', 'Wireless Phones'),
(7, 2, '2000s-2010s', 'Smartphones'),
(8, 2, '2020s-2030s', 'IoT; 5G/6G; Satellite Internet'),
(9, 3, '1960s-1970s', 'Mainframe Computers'),
(10, 3, '1980s-1990s', 'Desktop Computers'),
(11, 3, '2000s-2010s', 'Laptops/Tablets; Smartphones'),
(12, 3, '2020s-2030s', 'IoT; mRNA'),
(13, 4, '1960s-1970s', 'Stationary'),
(14, 4, '1980s-1990s', 'Movable'),
(15, 4, '2000s-2010s', 'Mobile'),
(16, 4, '2020s-2030s', 'Ubiquitous; Ambient'),
(17, 5, '1960s-1970s', 'Magnetic Tapes'),
(18, 5, '1980s-1990s', 'Floppy Disks; CDs'),
(19, 5, '2000s-2010s', 'Flash Drives; Central Cloud'),
(20, 5, '2020s-2030s', 'ReRAM/3D-NAND Drives; IPFS Cloud; DNA');
Joseph Potvin wrote:
Andrew and Charles, I'd appreciate comments and questions on the following. For reference, you could look at the attached CSV table in a spreadsheet. The purpose of the DWD data structure is to simultaneously optimize for simplicity (only one added character, which is pipe: '|'); compact storage (on a single row of a reference table); easy human auditability; fast processing; and a clean consistent structure that can be auto-adapted to any table.
The DWD Coordinate List looks like this:
INDEX|DATA|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|
|W1|COLUMNHEADER|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|
|W1.1|Function|1|7|13|19|25|
|W1.2|Attribute|2|8|14|20|26|
|W1.3|1960s-1970s|3|9|15|21|27|
|W1.4|1980s-1990s|4|10|16|22|28|
|W1.5|2000s-2010s|5|11|17|23|29|
|W1.6|2020s-2030s|6|12|18|24|30|
|T_W1.1|Communication Devices|1|
|T_W1.2|Wired|2|
|T_W1.3|Landline Phones|3|
|T_W1.4|Fax Machines|4|
|T_W1.5|ISDN/DSL; Fibre-Optic|5|
|T_W1.6|Multiplexed Fibre-Optic; Brain-Computer|6|
|T_W1.1|Communication Devices|7|
|T_W1.2|Wireless|8|
|T_W1.3|Radio; Television|9|
|T_W1.4|Wireless Phones|10|
|T_W1.5|Smartphones|11|
|T_W1.6|IoT; 5G/6G; Satellite Internet|12|
|T_W1.1|General-Purpose Computers|13|
|T_W1.2|Platform|14|
|T_W1.3|Mainframe Computers|15|
|T_W1.4|Desktop Computers|16|
|T_W1.5|Laptops/Tablets; Smartphones|17|
|T_W1.6|IoT; mRNA|18|
|T_W1.1|General-Purpose Computers|19|
|T_W1.2|Mobility|20|
|T_W1.3|Stationary|21|
|T_W1.4|Movable|22|
|T_W1.5|Mobile|23|
|T_W1.6|Ubiquitous; Ambient|24|
|T_W1.1|General-Purpose Computers|25|
|T_W1.2|Storage|26|
|T_W1.3|Magnetic Tapes|27|
|T_W1.4|Floppy Disks; CDs|28|
|T_W1.5|Flash Drives; Central Cloud|29|
|T_W1.6|ReRAM/3D-NAND Drives; IPFS Cloud; DNA|30|
The expanded DWD Array for that data is like this (which is easier to 'see' when right-justified):
|INDEX|DATA|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|
|W1|COLUMNHEADER|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|
|W1.1|Function|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|
|W1.2|Attribute|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|
|W1.3|1960s-1970s|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|
|W1.4|1980s-1990s|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|
|W1.5|2000s-2010s|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|
|W1.6|2020s-2030s|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|1|
|T_W1.1|Communication Devices|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.2|Wired|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.3|Landline Phones|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.4|Fax Machines|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.5|ISDN/DSL; Fibre-Optic|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.6|Multiplexed Fibre-Optic; Brain-Computer|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.1|Communication Devices|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.2|Wireless|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.3|Radio; Television|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.4|Wireless Phones|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.5|Smartphones|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.6|IoT; 5G/6G; Satellite Internet|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.1|General-Purpose Computers|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.2|Platform|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.3|Mainframe Computers|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.4|Desktop Computers|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.5|Laptops/Tablets; Smartphones|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.6|IoT; mRNA|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.1|General-Purpose Computers|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|
|T_W1.2|Mobility|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|
|T_W1.3|Stationary|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|
|T_W1.4|Movable|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|
|T_W1.5|Mobile|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|
|T_W1.6|Ubiquitous; Ambient|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|
|T_W1.1|General-Purpose Computers|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|
|T_W1.2|Storage|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|
|T_W1.3|Magnetic Tapes|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|
|T_W1.4|Floppy Disks; CDs|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|
|T_W1.5|Flash Drives; Central Cloud|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|
|T_W1.6|ReRAM/3D-NAND Drives; IPFS Cloud; DNA|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|
The CSV, shown below, would be difficult for a human to audit, especially if this table were much larger, because it's not obvious to distinguish secondary keys from values. Beyond a tiny table, it becomes just a data blob. By comparison, the DWD data structure is more intuitive and, with the API, would be faster for a computer to process.
Function,Attribute,1960s-1970s,1980s-1990s,2000s-2010s,2020s-2030s
Communication Devices,Wired,Landline Phones,Fax Machines,ISDN/DSL; Fibre-Optic,Multiplexed Fibre-Optic; Brain-Computer
Communication Devices,Wireless,Radio; Television,Wireless Phones,Smartphones,IoT; 5G/6G; Satellite Internet
General-Purpose Computers,Platform,Mainframe Computers,Desktop Computers,Laptops/Tablets; Smartphones,IoT; mRNA
General-Purpose Computers,Mobility,Stationary,Movable,Mobile,Ubiquitous; Ambient
General-Purpose Computers,Storage,Magnetic Tapes,Floppy Disks; CDs,Flash Drives; Central Cloud,ReRAM/3D-NAND Drives; IPFS Cloud; DNA
The SQL could look like this:
CREATE TABLE technology_categories (
id INT PRIMARY KEY,
category_name VARCHAR(50) NOT NULL
);
CREATE TABLE technology_attributes (
id INT PRIMARY KEY,
category_id INT,
attribute_name VARCHAR(50) NOT NULL,
FOREIGN KEY (category_id) REFERENCES technology_categories(id)
);
CREATE TABLE technology_evolution (
id INT PRIMARY KEY,
attribute_id INT,
era VARCHAR(20),
technologies TEXT,
FOREIGN KEY (attribute_id) REFERENCES technology_attributes(id)
);
With data:
sql
INSERT INTO technology_categories VALUES
(1, 'Communication Devices'),
(2, 'General-Purpose Computers');
INSERT INTO technology_attributes VALUES
(1, 1, 'Wired'),
(2, 1, 'Wireless'),
(3, 2, 'Platform'),
(4, 2, 'Mobility'),
(5, 2, 'Storage');
INSERT INTO technology_evolution VALUES
(1, 1, '1960s-1970s', 'Landline Phones'),
(2, 1, '1980s-1990s', 'Fax Machines'),
(3, 1, '2000s-2010s', 'ISDN/DSL; Fibre-Optic'),
(4, 1, '2020s-2030s', 'Multiplexed Fibre-Optic; Brain-Computer'),
(5, 2, '1960s-1970s', 'Radio; Television'),
(6, 2, '1980s-1990s', 'Wireless Phones'),
(7, 2, '2000s-2010s', 'Smartphones'),
(8, 2, '2020s-2030s', 'IoT; 5G/6G; Satellite Internet'),
(9, 3, '1960s-1970s', 'Mainframe Computers'),
(10, 3, '1980s-1990s', 'Desktop Computers'),
(11, 3, '2000s-2010s', 'Laptops/Tablets; Smartphones'),
(12, 3, '2020s-2030s', 'IoT; mRNA'),
(13, 4, '1960s-1970s', 'Stationary'),
(14, 4, '1980s-1990s', 'Movable'),
(15, 4, '2000s-2010s', 'Mobile'),
(16, 4, '2020s-2030s', 'Ubiquitous; Ambient'),
(17, 5, '1960s-1970s', 'Magnetic Tapes'),
(18, 5, '1980s-1990s', 'Floppy Disks; CDs'),
(19, 5, '2000s-2010s', 'Flash Drives; Central Cloud'),
(20, 5, '2020s-2030s', 'ReRAM/3D-NAND Drives; IPFS Cloud; DNA');
One small remark/suggestion: I would recommend a file format versioning specifier in the header section. This allows a file to be consumed in the presence of multiple possible formats; this helps keep the specification evolvable and implementations reliable and retrocompatible: if an implementation is able to easily detect the presence of an older format of the file, it may decide to parse it using the older mechanism, or simply inform that it is not supported; if an older implementation encounters a newer file format that it does not support, it can fail reliably/safely instead of trying to parse it and potentially produce silent or confusing errors.
e.g.
|VERSION|1.0|
|INDEX DATA|...|
...