Kann eine Tabelle ein "Alias" oder "Symlink" zu einer anderen sein?

10

Ich habe zwei Tabellen mit der gleichen Struktur, A und B. Eine bestimmte Anwendung ist so geschrieben, dass sie immer die gleichen Daten in beide Tabellen schreibt.

Nach einer Diskussion mit einem Kollegen über die Möglichkeit, Speicherplatz zu sparen, frage ich mich, ob MySQL oder PostgresQL die Möglichkeit haben, eine Tabelle als "Alias" oder "Symlink" eines anderen zu erstellen.

Ich möchte, dass das Verhalten dem eines Soft-File-Symlinks sehr ähnlich ist. Wenn das Lesen entweder vom Symlink selbst oder vom Ziel die gleiche Ausgabe liefert und das Schreiben in eines der beiden das Ziel aktualisiert.

user50849
quelle
2
Haben Sie eine Ansicht der Tabelle in Betracht gezogen?
In SQL Server können Sie einfach eine Ansicht verwenden.
JNK
1
Welches RDBMS? Sie haben MySQL und Postgres markiert. Ansichten funktionieren in den meisten RDBMS. Oracle hat Synonyme, die mit symbolischen Unix-Links
identisch sind
MySQL und Postgres, ja. Ich erwähne sie auch speziell im Text. Ich dachte, Views sei irgendwie nicht ganz das, wonach ich gesucht habe, aber vielleicht ist es in Ordnung. Danke vielmals. Einige Antworten
posten
1
und warum brauchst du zwei tische?
Wunder173

Antworten:

5

Soweit ich weiß, können Sie mit einem neuen Postgresql INSTEAD OFAuslöser für Ansichten erstellen. Eine Tabelle, eine Ansicht als SELECT * FROM table1und ein INSTEAD OFAuslöser für insert, update, deletesollten also für Sie funktionieren. Dieser Ansatz wird in MySQL jedoch nicht funktionieren

a1ex07
quelle
2

In MySQL (nur mit der MyISAM-Speicher-Engine) ist es möglich, mithilfe von Symlinks eine Tabelle von Grund auf neu zu erstellen. Es ist unter Linux und Windows möglich (über Hardlinks):

Hier sind meine früheren Beiträge zu diesem Thema

Was Sie jedoch vorschlagen, müsste außerhalb von MySQL unter Linux erfolgen.

Für dieses Beispiel

  • / var / lib / mysql ist ein Datadir
  • Erstellen Sie table1 als MyISAM-Tabelle in der Datenbank mydb
  • Erstellen Sie table2 als reine Symlinks zu table1

SCHRITT 01) Erstellen Sie Tabelle1

CREATE TABLE mydb.table1
(
    id int not null auto_increment,
    mydata varchar(255) not null,
    primary key (id)
) ENGINE=MyISAM;

SCHRITT 02) Erstellen Sie drei Symlinks, um Tabelle B nachzuahmen

cd /var/lib/mysql/mydb
ln -s table1.frm table2.frm
ln -s table1.MYD table2.MYD
ln -s table1.MYI table2.MYI

SCHRITT 03) Versuchen Sie, in Tabelle1 einzufügen und aus Tabelle2 zu lesen. Dann versuchen Sie es umgekehrt.

INSERT INTO table1 (mydata) VALUES ('rolando'),('edwards');
SELECT * FROM table2;
INSERT INTO table2 (mydata) VALUES ('abraham'),('lincoln');
SELECT * FROM table1;

Wenn sich alles normal verhält, können Sie dies so tun.

VORBEHALT

  1. Es gibt nur eine Tabelle, Tabelle1
  2. Wenn Sie eine DDL machen
    • Führen Sie die DDL für Tabelle 1 aus
    • Sie müssen die table2-Symlinks nach DDL gegen table1 neu erstellen
RolandoMySQLDBA
quelle