Bisakah saya memiliki satu tabel menjadi "alias", atau "symlink", ke yang lain?


10

Saya memiliki dua tabel dengan struktur yang sama, A dan B. Aplikasi tertentu ditulis sehingga selalu menulis data yang sama untuk kedua tabel.

Setelah berdiskusi dengan seorang kolega tentang potensi untuk menghemat ruang drive, saya bertanya-tanya apakah mysql atau postgresql memiliki kemampuan untuk membuat di atas meja sebagai "alias", atau "symlink", dari yang lain.

Saya ingin perilaku sangat mirip dengan symlink file lunak; di mana membaca dari symlink itu sendiri atau targetnya akan menghasilkan output yang sama, dan menulis ke salah satu akan memperbarui target.


2
Sudahkah Anda mempertimbangkan tampilan tabel?

Di SQL Server Anda bisa menggunakan tampilan.
JNK

1
RDBMS yang mana? Anda telah menandai MySQL dan Postgres. Tampilan akan berfungsi di sebagian besar RDBMSes. Oracle memiliki sinonim, yang sama dengan tautan simbolis Unix
Philᵀᴹ

MySQL dan Postgres, ya. Saya menyebutkannya secara khusus dalam teks juga. Saya pikir Tampilan entah bagaimana tidak cukup apa yang saya cari, tapi mungkin itu akan baik-baik saja. Terima kasih banyak. Posting beberapa jawaban :)
user50849

1
dan mengapa Anda membutuhkan dua tabel?
miracle173

Jawaban:


5

Sejauh yang saya tahu, Postgresql baru memungkinkan Anda memiliki INSTEAD OFpemicu pada tampilan. Jadi memiliki satu meja, satu tampilan sebagai SELECT * FROM table1, dan INSTEAD OFpemicu insert, update, deleteharus bekerja untuk Anda. Pendekatan ini tidak akan bekerja di Mysql


2

Dimungkinkan di MySQL (hanya menggunakan mesin penyimpanan MyISAM) untuk membuat tabel dari awal menggunakan symlink. Itu ada di Linux dan Windows (menggunakan hardlink):

Inilah posting saya yang lalu tentang hal ini

Namun, apa yang Anda usulkan harus dilakukan di luar MySQL di Linux.

Untuk contoh ini

  • / var / lib / mysql adalah datadir
  • Buat table1 sebagai tabel MyISAM di database mydb
  • Buat table2 sebagai symlink murni ke table1

LANGKAH 01) Buat tabel1

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

LANGKAH 02) Buat tiga symlink untuk meniru TableB

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

LANGKAH 03) Coba masukkan ke table1 dan baca dari table2. Kemudian coba sebaliknya.

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

Jika semuanya berperilaku normal, maka ini adalah bagaimana Anda dapat melakukan ini.

CAVEAT

  1. Hanya ada satu tabel, table1
  2. Jika Anda melakukan DDL
    • Lakukan DDL pada table1
    • Anda harus membuat ulang symlinks table2 setelah DDL terhadap table1
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.