Могу ли я создать таблицу с функцией row_number с разделением по предложению?

Сначала отметьте причину, по которой я задаю вопрос, и выразите надежду, что это возможно.

В MS SQL Server 2016 у вас есть возможность создать таблицу со столбцом, определенным математически, аналогичным row_number() over(order by (select 1)) as oid через identity(1,1) в определении таблицы.

Это приводит к вопросу ...

Есть ли встроенная функция для определения таблицы примерно следующего вида? (Да, это люди псевдокода ...)

CREATE TABLE Persons (
    LastName varchar(255) NOT NULL
    FirstName varchar(255),
    Age int,
    MemberInFamilyID int Row_number() over(partition by LastName order by 
    Age,FirstName),
);

Я знаю, что вы можете просто определить столбец и заполнить его постфактум, но мне любопытно, есть ли эффективный способ сделать это в определении таблицы, которая заполняется при вставке.

Мое текущее приложение - MS SQL Server, но возможность реализации в любой базе данных также была бы полезной информацией. В частности, PostgreSQL.


person John Drinane    schedule 23.01.2018    source источник
comment
Это было бы бессмысленно и на самом деле опасно, поскольку это позволило бы дублировать записи, если бы какие-либо строки были удалены. Что ты пытаешься сделать? Что не так с ИДЕНТИЧНОСТЬЮ или ПОСЛЕДОВАТЕЛЬНОСТЬЮ?   -  person Panagiotis Kanavos    schedule 23.01.2018
comment
Я считаю, что вид - это то, что вы ищете.   -  person Jacob H    schedule 23.01.2018
comment
Небольшой обходной маневр ... никогда не следует запоминать возраст человека. Как только данные сохраняются в базе данных, они устаревают. Вместо этого вы должны сохранить их дату рождения и вычислить их возраст, когда вам это нужно.   -  person Sean Lange    schedule 23.01.2018
comment
надуманный пример ... я не могу поделиться фактическим вариантом использования ...   -  person John Drinane    schedule 23.01.2018
comment
Я отредактировал вопрос, чтобы прояснить все, что мне нужно, это уникальный идентификатор, присущий только семье.   -  person John Drinane    schedule 23.01.2018
comment
Что вы получаете, ограничивая уникальность поля? Может помочь лучшее понимание варианта использования.   -  person David Rushton    schedule 23.01.2018
comment
Изначально я хотел, чтобы у человека, использующего данные, было что-то более интуитивное для работы, но эти комментарии заставляют меня понять, что это, вероятно, не так ценно, как первоначально предполагалось. Спасибо ... хороший шанс, что я удалю вопрос, если другие не сочтут полезным для сообщества поддерживать его. Вопрос может измениться на Может ли цикл основываться на вычисленном максимальном значении в последовательности ... Я думаю, что это то, что ускользало от @a_horse_with_no_name ...   -  person John Drinane    schedule 23.01.2018
comment
Возможно, вы ищете что-то вроде этого: stackoverflow.com/q/4672629/330315 или это: stackoverflow.com/q/17924675/330315 или так: stackoverflow.com/q/6821871/330315   -  person a_horse_with_no_name    schedule 23.01.2018
comment
@a_horse_with_no_name лол, это похоже на перефразирование того, что здесь только что произошло ...   -  person John Drinane    schedule 23.01.2018
comment
Если вы собираетесь использовать dob instad of age, то просто unique index on tablename (LastName,dob) это сделает. если у вас нет близнецов и дата рождения не является отметкой времени ... обычно люди используют какой-либо идентификатор человека, например, в удостоверении личности, паспорте или водительских правах ... Конечно, вы понимаете, что фамилия даже не является уникальным идентификатором для семьи   -  person Vao Tsun    schedule 23.01.2018
comment
@a_horse_with_no_name в этом ответе в основном есть кто-то, создающий функциональность, которую IMHO должна предоставлять база данных ... хорошо, спасибо ..., я многому научился, задав этот глупый вопрос :)   -  person John Drinane    schedule 23.01.2018