如何设计一个数据库来处理多个选择选项,其中可以选择多个选项?

时间:2019-05-24 04:50:14

标签: postgresql database-design relational-database

我刚开始使用PostgreSQL,并且已经对数据库的设计进行了很多思考。我有一张桌子:

CREATE TABLE activities (
    id            BIGSERIAL PRIMARY KEY,
    title         TEXT, 
    description   TEXT,
)

现在,我想在此表中包括可用性。可用性可以是:

  • 工作日
  • 周末
  • 平日晚上
  • 过夜

并且可以选择多个选项之一。我正在辩论是否要使用

  1. 与布尔值的一对一关系如下:
CREATE TABLE availability (
    id                BIGSERIAL PRIMARY KEY,
    activities_id     BIGINT REFERENCES activities,
    weekdays          BOOLEAN,
    weekends          BOOLEAN,
    weeknights        BOOLEAN,
    overnight         BOOLEAN,
)

  1. 具有ENUM类型的一对多关系,例如:
CREATE TYPE availabilityEnum AS ENUM ('weekdays', 'weeknights', 'weekends', 'overnight'');
CREATE TABLE availability (
    id                BIGSERIAL PRIMARY KEY,
    activities_id     BIGINT REFERENCES activities,
    availability      availabilityEnum,  
)

  1. 也许我根本不应该创建一个单独的表,而要做:
CREATE TABLE activities (
    id                BIGSERIAL PRIMARY KEY,
    title             TEXT, 
    description       TEXT,
    weekdays          BOOLEAN,
    weekends          BOOLEAN,
    weeknights        BOOLEAN,
    overnight         BOOLEAN,
)

请记住,我最终希望根据可用性过滤结果。例如,用户只能查找工作日活动,或者他们可以查找工作日,周末和通宵活动。

另外,对于我的特定用例,我有一个更大的表,并且这种结构出现了几次,每次都有不同数量的多个选择选项,范围从3到8(在我的示例中,我有4个:工作日,周末,工作日,过夜)。

非常感谢您的帮助

0 个答案:

没有答案