如何存储元数据以描述资产? 考虑到我事先并不知道我将拥有哪些元数据字段。
我有一张资产表(让我们说是人), 包含元数据字段的表(“名称”,“年龄”,“出生日期”,......) 包含链接到元数据字段表的元数据值的表(“John Doe”,44,“1968-10-10”,...) 以及将元数据字段链接到资产的交叉元数据。
我的问题是如何处理元数据字段表中的不同数据类型。 “John Doe”是文字,44是int,1968-10-10是日期。
我将这些存储在我的metadatafields表中的txt字段中,但是我能比较日期吗?
或者我将数据类型存储在此表中,并为txt,int和date创建3个字段。但后来我有很多空场。
或者我是否为每种数据类型创建不同的元数据字段表(例如:metadatafields_txt,metadatafields_int,metadatafields_date),但我无法正确链接到元数据表。
这里的最佳做法是什么?
TX
答案 0 :(得分:3)
您的答案的问题取决于您要对元数据执行的操作:如果您只想存储它们,VARCHAR
字段中的文本表示可能就足够了,它将简化您的查询。 / p>
您想要查询元数据的那一刻,远离存储文本表示,或者8<10
与'8'>'10'
和朋友一起烧毁。在这种情况下,我建议你有一个包含3个字段的元数据表,或者甚至有3个元数据表。我怀疑是一个包含3个字段的单个表的好点 - 查询仍然非常简单,并且可以管理空间(int是4个字节,空varchar是2或3个字节)。
BTW:对于其他数据类型,您可以充分利用int字段:通过存储日期的unix时间戳,您可以稍后避免使用某些UNIX_TIMESTAMP()
或FROM_UNIXTIME()
魔法。对于字符串,您可能需要长度(例如,如果您使用C-ish API)
答案 1 :(得分:1)
所有这些都是有效的选项(在第一种情况下稍作修改 - 我会存储一个额外的字段来指示存储哪种类型的数据,并在需要时进行适当的转换)。
第三个选项应该是可行的 - 而不是内部连接到一个表,您将连接到查询中的三个不同表。
正如欧根所说,这取决于 - 你事先知道你期望拥有多少元数据记录(只有一个数量级 - 数千,数百万,更多?),以及它们是否可能绝大多数类型?