0

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

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

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

提前致谢。

4

1 回答 1

2

如果您使用关系语言,那么一种适用于任何关系 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 以 10 的最大“燃烧”量击中肌肉 3,但仅以 5 点击中肌肉 4。这使您可以回答诸如“哪些练习最适合我的股四头肌?”之类的问题。

于 2015-09-21T06:53:54.887 回答