我正在尝试在这两种表格设计之间进行选择,性能是特权的(使用关节查询)
多个表:每个项目(或键)都有自己的表
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
);
我认为对于大多数操作来说,最后一个会更慢,对吗? 如果是,多少和何时?
从对该问题的评论来看,标准化的关系数据结构似乎最适合您的要求。这样的表结构可能如下所示:
Users
-----
UserID (PK)
UserName
... (other attributes)
Languages
---------
LanguageID (PK)
LanguageName
UserLanguage
------------
UserID (PK)
LanguageID (PK)
您可以将所有用户的语言放到用户表中(如语言 1、语言 2 等),但这将是非规范化的示例 - 在我看来,从提供的信息来看,它不适合您的要求。