Advice on structure /sequence / trigger

Поиск
Список
Период
Сортировка
От David Pratt
Тема Advice on structure /sequence / trigger
Дата
Msg-id FC832FB5-DEC5-11D9-AB38-000A27B3B070@eastlink.ca
обсуждение исходный текст
Ответы Re: Advice on structure /sequence / trigger
Список pgsql-general
I am interested in having some internationalization capability to an
application.  i18 will take care of the interface but not the data. To
internationalize the data, I am wanting to put the internationalized
text strings in a multi_language table like this:

CREATE TABLE multi_language (
    id                                   SERIAL,
          ml_id                            INTEGER NOT NULL,
    language_id               INTEGER NOT NULL,
    language_text             TEXT NOT NULL
);

Other tables would have be joined by ml_id (the multi language id).
For example:

CREATE TABLE example_table (
    id                                    SERIAL,
    name_ml_id                 INTEGER NOT NULL,

So in example_table, name_ml_id would join ml_id so you have the same
ml_id in multi_language table for more than one language. So there
would be two records in multi_language for a record in example_table if
you had an english translation and  french translation.

I want to add records to multi_language sequentially.  So lets say I
add a new example in example_table, I want to see what the last value
that was added to multi_language was so that if would use the next in
the sequence.  As you can see by the structure the id field is serial
and does this but I am speaking of the ml_id field specifically.  Let's
say I have one example record in example_table, multi_language would
look like this

1, 1, 1, the brown cow   # english translation of name - language 1 (en)
2, 1, 2,  la vache brun    # french translation of name - language 2
(fr)

ml_id for both record is 1.

So when I create a second record example_table, I want to have this:

1, 1, 1, the brown cow   # english translation of name (of example
record - language 1 (en)
2, 1, 2, la vache brun    # french translation of name (of example
record- language 2 (fr)
3, 2, 1, the blue turkey  #english translation of name (second record -
language 1(en)
4, 2, 2, la dandon bleu  #french translation of name (second record -
language 2 (fr)

How best to do this? Would I create a separate sequence for
multi_language ml_id and do a select on it to get the next value before
inserting each multi_language record.  Should this be done using a
trigger - if so how? Should this be done in my application code and not
sql or would that be dangerous.  For example, the multi_language table
will be used a lot. What if a couple of people were creating new
records at the same time. If I were using python and doing this in my
application code, I am wondering if there could be problems. With a
trigger it would be transactional, correct? Can you have a trigger work
from incrementing a sequence instead of updating a table?

I just want to get this right because it will be an important part of
what I am preparing. Sorry for the really long message but I don't know
if  it would make any sense if I did not fully explain what i am
wanting to do. I am not french so excuse my sample translations...

В списке pgsql-general по дате отправления:

Предыдущее
От: Jon Jensen
Дата:
Сообщение: Re: Viewing non-system objects in psql
Следующее
От: David Fetter
Дата:
Сообщение: Re: Viewing non-system objects in psql