"объектное программирование" всем голову заморочило; уже никто не представляет, как это, нормализация данных и две-три колонки в таблице; все городят по сорок колонок, особенно ещё со "стандартными полями" айди, дата создания, дата изменения. Как будто это файл в файловой системе. Уж изменения-то можно бы догадаться хранить как в контроле версий.
Но я не о том.
Объекты - в природе. У вас в программах - тоже объекты. А в реляционной базе - не объекты. Там реляции.
В связи с тем, что у всех головы заморочены теорией множеств, раем, в который нас загнал Кантор, реляции там представлены теоретико-множественными моделями, т.е. коллекциями туплов.
Ну так и что нам говорит один тупл? Вот к примеру:
User(id=42, firstname='John', lastname='Doe', dob='1234/56/78')
Этот тупл говорит о существовании юзера с идентификатором 42, именем Джон, фамилией Доу, дата рождения 78-е число 56-го месяца 1234-го года (кто сказал, что у нас календарь григорианский и мы на земле?). Этот тупл ничего не говорит о единственности такого юзера. Дополнительно, конечно, можно сказать, что сие отношение (между натуральными числами и туплами (firstname, lastname, dob) является частичной функцией. Но в принципе, это просто атомная формула.
Ну или НasAddress(userid=42, addressid=88)
говорит нам, что юзер с номером 42 и адрес с номером 88 (чуете? таки функция) находятся в отношении "один другого имеет". Это тоже атомная формула.
Вот и всё, что нам говорит реляционная алгебра.
И вот у этого последнего отношения не может быть никакого идентификатора; это бред. Если вы хотите записывать, которого числа такой-то юзер вступил в отношение "имеет" с таким-то адресом, это другое дело. Но хотите ли вы?
Насчёт же "updatedate" - пора бы уже как-то научиться ничего не апдейтить. А то ж вы понимаете, что концов не найдёшь потом.
Update:
Types | Logic | Sets | Homotopy |
A | proposition | set | space |
a : A | proof | element | point |
B(x) | predicate | family of sets | fibration |
b(x) : B(x) | conditional proof | family of elements | section |
0, 1 | ⊥,⊤ | ∅, {∅} | ∅, * |
A + B | A v B | disjoint union | coproduct |
A × B | A ^ B | set of pairs | product space |
A → B | A ⇒ B | set of functions | function space |
Σ(x:A) B(x) | ∃x:AB(x) | disjoint sum | total space |
Π(x:A) B(x) | ∀x:AB(x) | product | space of sections |
IdA | equality = | { (x, x) | x ∈ A} | path space AI |