我目前正试图修改一个与postgres数据库交互的现有API.长话短说,它本质上是存储描述符/元数据,以确定实际"assets资源 "(通常是某种文件)存储在服务器硬盘上的位置.
目前,可以使用any number of undefined个键值对(即uploadedBy、addedOn、assetType等)对这些"assets资源 "进行"标记".这些标记存储在一个单独的表中,其 struct 类似于以下内容:
+---------------+----------------+-------------+
|assetid (text) | tagid(integer) | value(text) |
|---------------+----------------+-------------|
|someStringValue| 1234 | someValue |
|---------------+----------------+-------------|
|aDiffStringKey | 1235 | a username |
|---------------+----------------+-------------|
|aDiffStrKey | 1236 | Nov 5, 1605 |
+---------------+----------------+-------------+
assetid和tagid是来自其他表的外键.假设assetid代表一个文件,tagid/值对是描述符的映射.
现在,API(Java)将所有这些键值对创建为映射对象.这包括时间戳/日期之类的内容.我们想要做的是能够以某种方式为键值对中的值存储不同类型的数据.或者至少,在数据库中以不同的方式存储它,这样,如果需要,我们可以在这些标记上运行查询,判断日期范围等.然而,如果它们作为文本项存储在数据库中,那么我们必须a.)知道这实际上是一个日期/时间/时间戳项,b.)转换成我们可以实际运行此类查询的内容.
到目前为止,我只想到一个 idea ,不需要对db的布局做太多的改变.
这是为了扩展assettag表(如上所示),为各种类型(数字、文本、时间戳)提供额外的列,允许它们为空,然后在插入时判断相应的"键",以确定它实际上是什么类型的数据.然而,我可以看到这种实现存在很多问题.
有没有PostgreSQL忍者能就如何解决这个问题提供建议?我最近才回到数据库交互的最深处,所以我承认我有点生疏了.