有人在数据库中存储键值对有经验吗?
我一直在使用这种类型的表:
CREATE TABLE key_value_pairs (
itemid varchar(32) NOT NULL,
itemkey varchar(32) NOT NULL,
itemvalue varchar(32) NOT NULL,
CONSTRAINT ct_primarykey PRIMARY KEY(itemid,itemkey)
)
然后,例如,可能存在以下行:
itemid itemkey itemvalue
---------------- ------------- ------------
123 Colour Red
123 Size Medium
123 Fabric Cotton
这种方案的问题在于提取数据所需的SQL语法非常复杂。
仅创建一系列键/值列会更好吗?
CREATE TABLE key_value_pairs (
itemid varchar(32) NOT NULL,
itemkey1 varchar(32) NOT NULL,
itemvalue1 varchar(32) NOT NULL,
itemkey2 varchar(32) NOT NULL,
itemvalue2 varchar(32) NOT NULL,
. . .etc . . .
)
这将更容易,更快捷地进行查询,但是缺少第一种方法的可扩展性。
有什么建议吗?
最佳答案
在继续您的方法之前,我谨建议您退后一步,考虑您是否真的要将此数据存储在“键值对”表中。我不知道您的应用程序,但是我的经验表明,每次完成您的操作后,我希望以后创建一个颜色表,织物表和尺寸表。
考虑一下参照完整性约束,如果您采用键值对方法,则当您尝试在size字段中存储颜色id时,数据库将无法告诉您
考虑一下在具有10个值的表上联接的性能优势,而在多个域中可能有成千上万个值的普通值。关键值索引真正有用吗?
通常,做您正在做的事情的原因是因为域需要是“用户可定义的”。如果是这样,那么即使是我也不会敦促您快速创建表(尽管这是可行的方法)。
但是,如果您的推理是因为您认为它比多张表更易于管理,或者因为您正在设想一个适用于所有域的维护用户界面,那么请停下来并认真思考,然后再继续。
关于sql - 关系数据库中的键值对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/126271/