мнезия первичный ключ - PullRequest
1 голос
/ 17 июня 2010

У меня есть две таблицы: одна заметка и одна метка, и я хочу сделать идентификатор из заметок первичным ключом, чтобы использовать его в таблице меток, но я не знаю, где я ошибаюсь.Мой идентификатор заметок генерируется из другого счетчика таблицы с функцией dirty_update_counter.

Моя функция для тега id_notes from выглядит следующим образом:

Fun = fun() -> 
                mnesia:write(#tag{ id_note =0}) 
        end, 
        mnesia:transaction(Fun). 

generate_Oid(TableName) when is_atom(TableName) -> 
        F = fun() -> 
                [Oid] = mnesia:read(tag, TableName, write), 
                NewId = Oid#tag.id_note+1, 
                New = Oid#tag{id_note = NewId}, 
                mnesia:write(New), 
                NewId 
        end, 
        mnesia:transaction(F). 

insert_n(N) when is_record(N, note) -> 
        F = fun() -> 
        {atomic, Id} = generate_Oid(note), 
        New = N#note{id = Id}, 
        mnesia:write(New), 
        New 
        end, 
        mnesia:transaction(F). 

find_n(Id) when is_integer(Id) -> 
        {atomic, [N]} = mnesia:transaction(fun() -> 
                mnesia:read({note, Id}) 
                        end), 
N.

Но эта функция неt увеличить мое поле id_note из тега таблицы, несмотря на то, что в моей таблице заметок мое поле id увеличивается из таблицы счетчиков.

Заранее благодарим за любую помощь.

1 Ответ

0 голосов
/ 17 июня 2010

Метод mnesia: dirty_update_counter / 3 может быть тем, что вы ищете.

...