Bir tablonun diğerine "takma ad" veya "simge bağlantısı" olabilir mi?


10

Aynı yapıya sahip iki tablo var, A ve B. Her zaman her iki tabloya aynı verileri yazacak şekilde belirli bir uygulama yazılır.

Bir meslektaşımla sürücü alanından tasarruf etme potansiyeli hakkında bir tartışmadan sonra, mysql veya postgresql'in bir başkasının "takma adı" veya "simge bağlantısı" oluşturma yeteneğine sahip olup olmadığını merak ediyorum.

Ben bir yumuşak dosya symlink çok benzer davranış istiyorum; burada symlink'in kendisinden veya hedefinden okumak aynı çıktıyı verir ve ikisinden birine yazmak hedefi günceller.


2
Masanın bir görünümünü düşündünüz mü?

SQL Server'da sadece bir görünüm kullanabilirsiniz.
JNK

1
Hangi RDBMS? MySQL ve Postgres'i etiketlediniz. Görünümler çoğu RDBMS'de çalışır. Oracle'ın Unix sembolik bağlantılarıyla aynı eşanlamlıları vardır
Philᵀᴹ

MySQL ve Postgres, evet. Onları özellikle metinde de belirtiyorum. Views'ın bir şekilde aradığım şey olmadığını düşündüm, ama belki de iyi olacak. Çok teşekkürler. Bazı cevaplar
gönderin

1
ve neden iki masaya ihtiyacınız var?
miracle173

Yanıtlar:


5

Bildiğim kadarıyla, yeni bir Postgresql INSTEAD OFgörünümler için tetikleyicilere izin veriyor . Yani bir tablo, bir görünüm SELECT * FROM table1ve INSTEAD OFtetikleyici insert, update, deleteolması sizin için çalışmalıdır. Bu yaklaşım Mysql'de işe yaramayacak


2

MySQL'de (yalnızca MyISAM depolama motorunu kullanarak) sembolik bağlantıları kullanarak sıfırdan bir tablo oluşturmak mümkündür. Linux ve Windows'da mümkündür (hardlink kullanarak):

İşte bu konuyla ilgili geçmiş yayınlarım

Ancak, önerdiğiniz şeyin Linux'ta MySQL dışında yapılması gerekir.

Bu örnek için

  • / var / lib / mysql datadir
  • Mydb veritabanında MyISAM tablosu olarak table1 oluşturma
  • Table2 için saf semboller olarak table2 oluşturma

ADIM 01) Tablo oluştur1

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

ADIM 02) TableB'yi taklit etmek için üç sembol oluşturun

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

ADIM 03) table1'e yerleştirmeyi ve table2'den okumayı deneyin. Sonra tersini deneyin.

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

Her şey normal davranıyorsa, bunu böyle yapabilirsiniz.

UYARI

  1. Sadece bir tablo var, tablo1
  2. Herhangi bir DDL yaparsanız
    • DDL'yi table1 üzerinde gerçekleştirin
    • DD1'den sonra table1'e göre table2 sembollerini yeniden oluşturmanız gerekir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.