MySQL 表 USERS 和 FLASHCARDS - 如何根据另一个修改一个?
Posted
技术标签:
【中文标题】MySQL 表 USERS 和 FLASHCARDS - 如何根据另一个修改一个?【英文标题】:MySQL tables USERS and FLASHCARDS - how to modify one depending on the other? 【发布时间】:2015-08-04 23:32:53 【问题描述】:我正在实现一个抽认卡应用程序,因此我的 FLASHCARDS 表包含诸如 QUESTION 和 RESPONSE 之类的字段,而我的 USERS 表就是这样 - 我的抽认卡应用程序的名称和个人信息。
这就是我感到困惑的地方。 FLASHCARDS 表将包含 100 多个问题和响应,这些问题和响应被归类为抽认卡(或卡片组)的“组”。当用户“使用”抽认卡时,他们还可以决定问题是简单、普通还是困难 - 从而修改下次显示卡片的时间。
如果我只有一个用户,这不会有问题 - 我只需相应地修改 FLASHCARDS 表,但我也会有 100 多个用户。如何根据用户对 EASY、NORMAL 或 DIFFICULT 的每个决定修改 FLASHCARDS 表并为每个用户记录所有这些(我想在 USERS 表中)。
【问题讨论】:
我不同意“接近”的投票。这个问题不是太宽泛,它是一个特殊的问题。该问题可能有其他“解决方案”,但这些解决方案是错误的。就数据库的逻辑设计而言,只有一种“正确”的方法可以解决这个问题。就“不清楚”而言,我看不出OP如何使问题更清楚。 OP正在开发数据库模型,并且有一个问题。嘘。 贾斯汀:欢迎来到 *** 社区!我们期待您的周到贡献!我认为您提出的问题是适当的,并且清楚地提出了。请不要被不理解您的问题的社区成员气馁。 【参考方案1】:“抽认卡”实体和“用户”实体之间存在多对多关系。
特定的“用户”对特定的“抽认卡”做出决定。
“用户”可以就零个、一个或多个“抽认卡”做出决定。
“抽认卡”可以由零个、一个或多个“用户”决定。
这是一个经典的多对多关系。
在关系模型中,我们引入了一个新的关系表,建立了“用户”和“抽认卡”之间的关系
作为此表的示例:
CREATE TABLE user_flashcard
( user_id INT UNSIGNED NOT NULL COMMENT 'fk ref user'
, flashcard_id INT UNSIGNED NOT NULL COMMENT 'fk ref flashcard'
, decision VARCHAR(30) COMMENT 'EASY,NORMAL,DIFFICULT'
, PRIMARY KEY (user_id,flashcard)
, CONSTRAINT FK_user_flashcard_user
FOREIGN KEY (user_id) REFERENCES user(id)
, CONSTRAINT FK_user_flashcard_flashcard
FOREIGN KEY (flashcard_id) REFERENCES flashcard(id)
)
您可以添加其他属性,例如:用户上次查看抽认卡的时间、用户查看的次数。
您还需要考虑这是否只是一个纯粹的关系,或者这是否实际上可能是您模型中的一个实体。如果我们有重复的属性,或者任何其他实体可能与此表相关,我们可能会想引入一个简单的主键(id
),其他表可以在外键中引用。
我们也想考虑一下,我们是否希望用户对抽认卡有多个决定? (user_id,flashcard_id)
必须是唯一的,还是非唯一的。
数据库设计的关键是数据分析。而“进行”数据分析的最好的、经过验证的技术之一是实体关系建模。
后续示例演示
为了演示这个“关系”表是如何工作的,我创建了一个非常简短的 SQL Fiddle,展示了使用一些相当简单的 SQL 可以很容易地回答的问题。
SQL Fiddle Here http://sqlfiddle.com/#!9/090ee/5
【讨论】:
这就是我要写的!除了:错字,“Flaschard”。decision
可以是 ENUM
字段。
谢谢 spencer7593,非常感谢您的回答,这在逻辑上是有道理的,我需要花点时间了解一下,我还是个新手,我还没有之前实现了任何关系表概念!再次感谢您的宝贵时间!
贾斯汀:没有人天生就有做数据库设计的技能。这需要时间和精力,看起来你正在取得进步!识别可以唯一识别的“实体”、人、地点、事物、概念或事件,我们需要存储有关这些实体的信息以及这些实体之间的“关系”。通过提出正确的问题,“一张抽认卡可以由多个用户决定吗?” “一个用户可以决定多个抽认卡吗?”我们得出关系的基数,1 对 1、1 对多、0 或 1 对多等。我们通过添加表来解决多对多问题。
一个示例表,其中包含一些行,确实有助于您了解它。并编写查询......“用户决定使用哪些抽认卡?” “用户认为哪些抽认卡很简单”?哪些用户认为特定的抽认卡很难?等以上是关于MySQL 表 USERS 和 FLASHCARDS - 如何根据另一个修改一个?的主要内容,如果未能解决你的问题,请参考以下文章