【问题标题】:Several boolean fields or one text field in database?数据库中有几个布尔字段或一个文本字段?
【发布时间】:2015-09-19 17:03:47
【问题描述】:

我刚刚涉足数据库,在创建数据库时,我意识到在某些情况下,可能是文本字段也可能是多个布尔字段。

举一个具体的例子:我正在创建一个数据库,其中包含各种练习和每个练习的肌肉。对于每个练习,我可以有一个 muscles_worked TEXT shoulders BOOLEAN, pecs BOOLEAN, lower_legs BOOLEAN, etc.

我正在尝试对系统资源保持精明,并尽可能保持数据库(以及任何附加代码)精简,那么哪种方法是首选方法?

提前致谢。

【问题讨论】:

  • SQLite 没有本机布尔类,但您可以将布尔值存储为整数。 0 或 1。我建议您使用后者,因为您将如何索引您的肌肉工作文本?如果您稍后要查询这些值,您会希望它们成为单独的列。话虽如此,我工作过的情况是,我知道我永远不会在 where 子句中索引或查询该值,但我绝对需要节省空间 - 您可以在单个字节中存储多个布尔值 blog.millermedeiros.com/…
  • 对不起,也许我应该澄清一下,我正在使用 LibreOffice Base 编译数据集,稍后会将其转换为 SQLite。同样,刚刚开始使用数据库,所以感谢您提供的信息,当我将其移至 SQLite 时,我会确保记住这一点。

标签: database sqlite database-design openoffice-base libreoffice-base


【解决方案1】:

如果您使用关系语言,那么一种适用于任何关系 DBMS 的方法就会变得显而易见。

“我有这些练习和那些肌肉。我怎样才能在它们之间建立一种关系,以显示哪些肌肉被一项练习锻炼,哪些锻炼锻炼了每块肌肉。”那么当你解释说“每项运动可以锻炼几块肌肉,每块肌肉可以通过几项运动得到锻炼”,那么答案就会跳出来。

一个标准的交叉口或交汇点表:

create table Exercises(
    ID      int  not null,
    Name    varchar( 16 ) not null, -- 'Bench Press', 'Chest Fly', etc.
    ...,
    constraint PK_Exercieses primary key( ID )
);
create table Muscles(
    ID      int  not null,
    Name    varchar( 16 ) not null, -- 'Pectorals', 'Biceps', etc.
    ...,
    constraint PK_Muscles primary key( ID )
);
create table ExerciseToMuscle(
    ExerciseID int  not null,
    MuscleID   int  not null,
    ...,
    constraint PK_ExerciseToMuscle primary key( ExerciseID, MuscleID ),
    constraint FK_ExerciseToMuscle_Exercise foreign key( ExerciseID )
        references Exercises( ID ),
    constraint FK_ExerciseToMuscle_Muscle foreign key( MuscleID )
        references Muscles( ID )
);

您可以向交集表中添加属性来描述关系。这样的属性可能是强度,以显示运动对肌肉的“冲击”程度。

ExerciseID MuscleID Intensity
        17        4         5
        17        3        10

这表明练习 17 对肌肉 3 的最大“烧伤”为 10,但对肌肉 4 的最大“烧伤”仅为 5。这使您可以回答诸如“哪些练习最适合我的股四头肌?”之类的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多