有些人可以建议实施此方法的最佳方式:
基本上我想要的是PostgreSQL中的虚拟表,当查询时,它会从其他表中查找数据(将其称为原始数据表)。但问题是,原始数据表中的数据需要进行转换,一旦完成,结果将返回,就像它在原始表中一样。
我将用插图和一个例子(不是我真正的程序,但只是一个简单的例子来解释我需要的主要内容)来解释:
原始数据表
| id (int) | data (byte[]) |
----------------------------
| ... | ... |
| ... | ... |
人员表(虚拟表格)
| name (varchar) | address (varchar) | phone (varchar) |
--------------------------------------------------------
| ... | ... | ... |
| ... | ... | ... |
| ... | ... | ... |
我现在想要的是,当我这样做时:
SELECT * FROM person WHERE name = 'Kim';
对于反序列化/转换等,我猜我可能需要一些编程语言函数,所以对于Java来说Pl/Java这样的东西可能有用吗?
此外,您可以假设原始数据表不会很长,它实现为固定大小的缓冲区,因此读取每个查询的所有条目并不是一个大问题。
从概念上讲,我需要的是一个触发器功能,但似乎我们不能在READ上触发。任何关于如何解决这个问题的帮助都将不胜感激。
答案 0 :(得分:1)
这个数据库设计对我来说似乎完全没了。您正试图通过错误使用RDBMS来重新实现RDBMS。
但是如果你坚持使用这种设计,我能想到的唯一方法就是编写一个set return函数,以一种程序的方式处理原始数据的所有处理和解包。根据二进制数据的复杂性,PL / pgSQL可能就足够了。
然后,您将执行SELECT * FROM retrieve_person()
以获得所需的输出。