我正在尝试在这两个表设计之间进行选择,性能是特权(使用关节查询)
多个表:每个项目(或键)都有自己的表
CREATE TABLE users_languages (
"user_id" bigint not null,
"language" integer not null,
primary key ("user_id", "language"),
foreign key ("user_id") references users ("user_id") on delete cascade
);
一个KVP表:包含所有项目/密钥
CREATE TABLE users_kvp (
"user_id" bigint not null,
"key" varchar not null, -- could be "language" or other
"value" integer not null,
primary key ("user_id", "key", "value"),
foreign key ("user_id") references users ("user_id") on delete cascade
);
我认为对于大多数操作来说,最后一个会慢一些,对吗?如果是,多少和何时?
答案 0 :(得分:1)
从对问题的评论来看,规范化的关系数据结构看起来最符合您的要求。这样的表结构可能类似于:
Users
-----
UserID (PK)
UserName
... (other attributes)
Languages
---------
LanguageID (PK)
LanguageName
UserLanguage
------------
UserID (PK)
LanguageID (PK)
你可以将所有用户的语言放到Users表中(如Language1,Language2等),但这只是denormalisation的一个例子 - 在我看来,从提供的信息,这对你的要求是不合适的。