3 ms·
Created a fork with a solution.
by spion 11y ago
Created a fork with a solution.
- catnaroek 11y agoIt isn't apparent from my identifiers, but, in my `existing.sql`, `person`'s real primary key isn't just `person_id`, but rather `(gender, person_id)`. The way you've handled it, now you have an invariant to maintain that `male_id`s and `female_id`s don't collide. If you want to define arbitrarily many sum tables in your database, this can be really hard to enforce. My `proposed.sql` doesn't have such a problem.
- spion 11y agoRight, which is why I initially said that sum types (disjoint unions) are missing :)
- catnaroek 11y agoProduct tables are missing too. Let's say you have tables `foo` and `bar`. For every `foo` and every `bar`, you want the user to specify a `qux` value. Presently, what you need to do is: (0) Create a table `foo_bar`, with fields `foo_id`, `bar_id` and `qux`. In particular, `qux` must be nullable. [Yuck!] (1) Add triggers to `foo` and `bar` that automatically insert or delete rows from `foo_bar`. (2) Hope [I'm not joking] the user remembers to set all the `qux` values in `foo_bar` whenever he inserts a row into either `foo` or `bar`.