¿Puedo hacer que una tabla sea un "alias" o "enlace simbólico" a otra?

10

Tengo dos tablas con la misma estructura, A y B. Se escribe una determinada aplicación para que siempre escriba los mismos datos en ambas tablas.

Después de una discusión con un colega sobre el potencial para ahorrar espacio en el disco, me pregunto si mysql o postgresql tienen la capacidad de crear en la tabla como un "alias" o "enlace simbólico" de otro.

Quiero que el comportamiento sea muy similar al de un enlace simbólico de archivo blando; donde leer desde el enlace simbólico en sí mismo o su objetivo producirá el mismo resultado, y escribir en cualquiera actualizará el objetivo.

usuario50849
fuente
2
¿Has considerado una vista de la mesa?
En SQL Server, podría usar una vista.
JNK
1
¿Qué RDBMS? Has etiquetado MySQL y Postgres. Las vistas funcionarán en la mayoría de los RDBMS. Oracle tiene sinónimos, que son los mismos que los enlaces simbólicos de Unix
Philᵀᴹ
MySQL y Postgres, sí. Los menciono específicamente en el texto también. Pensé que Views no era de alguna manera lo que estaba buscando, pero tal vez estaría bien. Muchas gracias. Publica algunas respuestas :)
user50849
1
y por que necesitas dos mesas?
milagro173

Respuestas:

5

Hasta donde yo sé, un nuevo Postgresql te permite tener INSTEAD OFdisparadores en las vistas. Por lo tanto, tener una tabla, una vista como SELECT * FROM table1y INSTEAD OFdesencadenador para insert, update, deletedebería funcionar para usted. Sin embargo, este enfoque no funcionará en Mysql

a1ex07
fuente
2

Es posible en MySQL (usando solo el motor de almacenamiento MyISAM) crear una tabla desde cero usando enlaces simbólicos. Es posible en Linux y Windows (usando enlaces duros):

Aquí están mis publicaciones anteriores sobre este tema.

Sin embargo, lo que está proponiendo debería hacerse fuera de MySQL en Linux.

Para este ejemplo

  • / var / lib / mysql es datadir
  • Crear tabla1 como tabla MyISAM en la base de datos mydb
  • Crear table2 como enlaces simbólicos puros a table1

PASO 01) Crear tabla1

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

PASO 02) Cree tres enlaces simbólicos para imitar TableB

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

PASO 03) Intente insertar en la tabla1 y leer desde la tabla2. Entonces intente lo contrario.

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

Si todo se comporta normalmente, entonces así es como puedes hacer esto.

CONSIDERACIÓN

  1. Solo hay una tabla, tabla1
  2. Si haces cualquier DDL
    • Realizar el DDL en la tabla 1
    • Debe volver a crear los enlaces simbólicos de table2 después de DDL contra table1
RolandoMySQLDBA
fuente