一个或多个用于存储键值对的表



我正在尝试在这两种表格设计之间进行选择,性能是特权的(使用关节查询)

多个表:每个项目(或键)都有自己的表

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 等),但这将是非规范化的示例 - 在我看来,从提供的信息来看,它不适合您的要求。

最新更新