2011-08-31 1 views
2

Disons que j'ai deux tables.Utilisation du type de données en série en tant que clé étrangère

La première est la suivante: les listes de table, avec numéro de série list_id, LIST_NAME TEXTE

Le deuxième tableau est, trivialement, une table qui indique si la liste est publique: list_id INT, is_public INT

De toute évidence un peu d'un cas artificiel, mais je prévois des tables et cela semble être un problème. Si j'insère un nouveau nom de liste dans les listes de tables, cela me donnera un nouveau numéro de série ... mais maintenant je devrai utiliser ce numéro de série dans la seconde table. Évidemment, dans ce cas, vous pouvez simplement ajouter is_public à la première table, mais dans le cas d'une liste de liens où vous avez une clé composée, vous devez connaître la valeur de série qui a été retournée.

Comment les gens gèrent-ils habituellement cela? Est-ce qu'ils obtiennent le type de retour de l'insertion en utilisant le système avec lequel ils interagissent avec la base de données?

Répondre

2

Une approche de ce genre de chose est:

INSERT dans la première table, utilisez lastval() pour obtenir la « valeur la plus récente obtenue avec nextval pour toute séquence "(dans la session en cours), puis utilisez cette valeur pour créer votre n ext INSERT.

Il y a aussi INSERT ... RETURNING:

La clause RETURNING optionnelle provoque INSERT pour calculer et de la valeur de retour (s) en fonction de chaque ligne en insertion. Ceci est principalement utile pour obtenir des valeurs qui ont été fournies par défaut, comme un numéro de séquence en série.

L'utilisation INSERT ... RETURNING id combine essentiellement les deux premières étapes ci-dessus dans l'un que vous voulez faire alors:

  • INSERT ... RETURNING id
  • INSERT ...

où le second INSERT utiliser le id retourné de le premier INSERT.

+0

magnifique, merci –

Questions connexes