我正在尝试创建一个包含多个值的键的数据库。
例如,键将是“benchpress”,值将是“胸部”,“三角形”,“肩部”。
我会有一堆这些键,然后想要搜索这些值并返回包含我正在搜索的内容的所有键。例如,如果我搜索胸部,我会得到具有该值的benchpress和其他练习。
我想知道这是否可行以及最好的方法是什么。我假设我必须使用MySql。
谢谢!
答案 0 :(得分:1)
在MySql中执行此操作的一种方法是使用两个单独的表 - 一个用于“运动”,一个用于受影响的肌肉群。这些将由共享的“密钥”(MuscleID
)加入。要向肌肉群添加新的锻炼,您只需将其添加到具有正确“MuscleID”的锻炼表中。
例如:
create table Exercise (MuscleID int, exercise varchar(50));
insert into Exercise values (1, "benchpress"),(2, "leg press");
create table Muscles (MuscleID int, muscles varchar(50));
insert into Muscles values (1, "chest"),(1, "deltoid"),(1, "shoulder"),(2, "thigh")
select *
from Exercise as E
inner join Muscles as M on M.MuscleID = E.MuscleID
where E.exercise = "benchpress"
演示:http://sqlfiddle.com/#!2/19c9c/1
但是,这可能不是一个足够灵活的系统。对于更全面的设置,answer by @matt617很可能是更好的选择,但如果你做的很简单,这可能对你有用。
答案 1 :(得分:1)
你可能想要三张桌来做这件事。一个用于举行所有练习,一个用于保持所有肌肉,一个用于将练习与各自的肌肉相关联。然后,您可以使用JOIN语句查询第三个表以确定任何一个练习所针对的肌肉。
三个表与两个表的好处是每个运动定义和肌肉定义是独立的,因此任何运动都可以针对多个肌肉,任何肌肉都可以通过多次运动来定位。
<强>模式强>:
表exercise
id (int255) | exerciseName (varchar255)
表muscles
id (int255) | muscleName (varchar255)
表exerciseTargets
exerciseId (int255) | muscleId (int255)
<强>键强>:
exercise.id
:primary
exercise.name
:唯一
muscles.id
:primary
muscles.name
:唯一
exerciseTargets.exerciseId
:exercise.id
exerciseTargets.muscleId
:muscle.id
示例查询:
SELECT muscleName FROM muscles INNER JOIN exerciseTargets ON exerciseTargets.muscleId = muscles.id WHERE exerciseTargets.exerciseId = :exerciseId;
(其中:exerciseId
是练习的ID。)
答案 2 :(得分:0)
我建议更多地研究一下Ontology或一般的Graph Dataset。
本体正式将知识表示为域内的一组概念,使用共享词汇表示这些概念的类型,属性和相互关系。而Graph是一种更自由的关系概念(如社交网络)。所有本体实质上都是图形,但并非所有图形都是本体。
使用N3格式(这是软件本体最常见的格式)的RDF的一个非常过分的例子是:
@prefix:http://www.example.org/。 :二头肌a:肌肉。 :tricep a:肌肉。 :quadracep a:肌肉
然后你会有一个单独的RDF练习
@prefix:http://www.example.org/。 :benchpress a:运动。
然后你可以开始将它们映射到一起:
@prefix:http://www.example.org/。 :benchpress:用途:二头肌:胸肌
还有一种XML格式。有关详细信息,请访问以下网站:http://www.rdfabout.com/quickintro.xpd
事实上,如果肌肉群的RDF存在于开放领域,我不会感到惊讶,我只是对它们没有多大看法。
如果你更像是一个信息科学家类型的程序员,那么Neo4J是一个很棒的图形数据库,可以让你在没有完整本体的情况下实现图形。它使用一种非常方便的查询语言Cypher来描述关系http://www.neo4j.org/learn/cypher
我相信您可以创建一个足以满足您需求的MySQL数据库,但根据您的应用程序的长期使用将非常难以维护。