| column | type | notes |
|---|---|---|
element_z | INT | atomic number (1–118) |
element_symbol | TEXT(3) | “H”, “He”, … |
element_label | TEXT | “H (1)” exactly as in files |
known_isotopes | INT | experimentally observed, strict stable definition applied elsewhere |
stable_isotopes_strict | INT | strict IUPAC stable count |
unstable_isotopes | INT | computed = known − stable |
predicted_isotopes_est | INT | Neufcourt-scaled total (sums to 7,759) |
gap_pred_minus_known | INT | predicted − known |
If you prefer a normalized model, split “known”, “predicted” and “metadata” into separate tables keyed by
element_z.
SQL DDL (Postgres / MySQL compatible):
CREATE TABLE isotopes_master (
element_z INT PRIMARY KEY,
element_symbol VARCHAR(3) NOT NULL,
element_label VARCHAR(16) NOT NULL,
known_isotopes INT NOT NULL,
stable_isotopes_strict INT NOT NULL,
unstable_isotopes INT NOT NULL,
predicted_isotopes_est INT NOT NULL,
gap_pred_minus_known INT NOT NULL
);
Upsert loader (Postgres):
-- assuming a temp staging table or CSV loader
-- columns in CSV: Element (Z), Isotopes Known, Stable, Unstable, Predicted Isotopes (est.), Gap (Predicted - Known)
-- element_symbol is parsed from Element (Z) token before the space
-- element_z is parsed from inside parentheses
-- Example: programmatic load recommended (see ETL note below)
ETL note: parse element_symbol and element_z from element_label (“Fe (26)”) in your loader. If you want, I can generate a clean JSON with explicit element_z and element_symbol columns.