Heim > Datenbank > MySQL-Tutorial > Wie kann ich benutzerdefinierte Untersequenzen in PostgreSQL basierend auf Fremdschlüsselwerten erstellen?

Wie kann ich benutzerdefinierte Untersequenzen in PostgreSQL basierend auf Fremdschlüsselwerten erstellen?

Mary-Kate Olsen
Freigeben: 2025-01-24 05:47:16
Original
633 Leute haben es durchsucht

Benutzerdefinierte PostgreSQL-Teilsequenzgenerierung: Methode zur Teilsequenzerstellung basierend auf Fremdschlüsselwerten

In diesem Artikel wird erläutert, wie Sie benutzerdefinierte Teilsequenzen basierend auf Fremdschlüsselwerten in PostgreSQL erstellen. Die Sequenzen von PostgreSQL werden normalerweise verwendet, um eindeutige Bezeichner für Zeilen in einer Tabelle zu generieren. In einigen Fällen kann es jedoch erforderlich sein, dass die Generierung einer Sequenz vom Wert einer anderen Spalte abhängt und so eine Teilsequenz erstellt.

Das folgende Bild zeigt den Kern des Problems:

How Can I Create Custom Sub-Sequences in PostgreSQL Based on Foreign Key Values?

Sequenzgenerierung basierend auf benutzerdefinierter Korrelation

Beachten Sie die folgende Tabellenstruktur:

列名 数据类型 说明
id integer 外键,指向另一张表
seq integer 每个id的序列号
data text 无关信息

Das Ziel besteht darin, ein Identifikatorsystem aufzubauen, bei dem jede eindeutige Kombination aus ID und SEQ einer Zeile in der Tabelle entspricht.

PostgreSQL erreicht dies durch eine clevere Kombination aus Tabellendesign und Triggern. Wir können zwei Tabellen erstellen: things und stuff, wobei things eindeutige Bezeichner darstellt und stuff die tatsächlichen Daten speichert, die mit jedem Bezeichner verknüpft sind.

Tabellen und Trigger erstellen

thingsDie Tabelle kann eine ID als Primärschlüssel erstellen:

<code class="language-sql">CREATE TABLE things (
    id serial primary key,
    name text
);</code>
Nach dem Login kopieren

Für die stuff-Tabelle definieren wir eine Kombination aus id und seq als Primärschlüssel:

<code class="language-sql">CREATE TABLE stuff (
    id integer references things,
    seq integer NOT NULL,
    notes text,
    primary key (id, seq)
);</code>
Nach dem Login kopieren

Als nächstes implementieren wir eine Triggerfunktion namens things für die Tabelle make_thing_seq. Dieser Trigger wird nach jeder Zeileneinfügung aufgerufen und erstellt eine neue Sequenz mit der eingefügten ID.

<code class="language-sql">CREATE FUNCTION make_thing_seq() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
begin
  execute format('create sequence thing_seq_%s', NEW.id);
  return NEW;
end
$$;</code>
Nach dem Login kopieren

Dann erstellen wir einen Trigger mit dem Namen things in der Tabelle make_thing_seq:

<code class="language-sql">CREATE TRIGGER make_thing_seq AFTER INSERT ON things FOR EACH ROW EXECUTE PROCEDURE make_thing_seq();</code>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass immer dann, wenn eine neue Zeile in die things-Tabelle eingefügt wird, eine entsprechende Sequenz erstellt wird.

Schließlich erstellen wir eine Triggerfunktion namens fill_in_stuff_seq, die vor jeder Zeileneinfügung aufgerufen wird und die Spalte seq mit dem entsprechenden nächsten Wert der Sequenz füllt.

<code class="language-sql">CREATE FUNCTION fill_in_stuff_seq() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
begin
  NEW.seq := nextval('thing_seq_' || NEW.id);
  RETURN NEW;
end
$$;</code>
Nach dem Login kopieren

Erstellen Sie einen Trigger mit dem Namen stuff in der Tabelle fill_in_stuff_seq:

<code class="language-sql">CREATE TRIGGER fill_in_stuff_seq BEFORE INSERT ON stuff FOR EACH ROW EXECUTE PROCEDURE fill_in_stuff_seq();</code>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass beim Einfügen einer Zeile in der stuff-Tabelle der seq-Wert automatisch basierend auf dem zugehörigen ID-Wert festgelegt wird.

Ergebnisse

Mit diesen Triggern kann die gewünschte Sequenzgenerierung erreicht werden. Durch das Einfügen von Daten in die Tabelle things wird eine neue Sequenz erstellt, und durch das Einfügen von Daten in die Tabelle stuff wird automatisch die richtige Sequenznummer basierend auf der ID-Referenz zugewiesen.

Durch die Kombination dieser Techniken können wir komplexe und flexible Datenstrukturen erstellen, die spezifische Sortieranforderungen erfüllen.

Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte Untersequenzen in PostgreSQL basierend auf Fremdschlüsselwerten erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage