Closed. This question needs to be more
focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过
editing this post专注于一个问题。
4年前关闭。
我正在开发类似Twitter的Android应用程序。我只想知道其背后的逻辑。
关于mysql,我要为每个注册用户创建一个新数据库,还是有一个庞大的数据库并为每个注册用户创建一个表?那么,每个用户的表或数据库中是否都将有一个用户名,密码,朋友列表并发布列?
我基本上想知道是否应该为每个新用户或现有数据库中的表创建一个新数据库。
谢谢,对于不确定性,我们深表歉意。
听起来您是一个全新的人……这是如何设置具有用户的典型应用程序的粗略概述。我将使用一些术语,您可能需要查找它们以更好地学习一些数据库基础知识。我将它们用双引号括起来,并在底部添加一个列表。
您的应用程序将只有一个数据库。该数据库将包含一个名为“ user”的表,该表的列为“ id”,“ username”,“ password”(您需要研究如何在数据库中安全地存储密码,这超出了此响应的范围。请勿仅在纯文本中存储密码)。包含密码是因为应用程序控制登录。您不能将MySQL用户用作应用程序用户。 MySQL可能有两个用户-一个给您,一个给您的应用程序。如果您已经知道,我深表歉意。您似乎太新了,可能还没有,如果是这种情况,那么值得一提,因为它可以为您省去很多麻烦。
应用程序的每个用户在此表中都作为行/条目存在。列“ id”是所谓的“主键”。这意味着该值对于表中的每个条目都是不同的,并且用于唯一地标识每个用户。
然后,您要创建它,以便用户可以创建帖子。每个用户可以创建多个帖子,但是每个帖子只能由一个用户创建,这使之成为“一对多关系”。通常如何实现此目的,是通过创建第二个表“ post”。帖子具有“ id”,“ author”和“ content”列。同样,post.id是该表的主键。 post.author是所谓的“外键”。这意味着它引用了一个主键-在这种情况下为user.id。可以将其视为某种指针。如果要查找创建帖子的人的用户名,则可以在“帖子”表中查看该帖子的条目,并找到该条目的作者价值。您可以使用该编号在用户表中查找帖子的作者。
例如,考虑以下表格:
user
id username
1 awesome_user
2 more_awesome_user
3 less_awesome_user
post
id author content
1 1 I am awesome
2 3 Yes you are, awesome_user
3 2 I am more awesome
4 1 No you're not
5 2 Yes I am look at my name
6 1 having more_ in front of your name doesn't make you more awesome
在这种情况下,您可以说“我很棒”帖子是由用户“ awesome_user”创建的,因为该帖子和用户的post.author = user.id。要了解如何实际编写执行此操作的查询,您应该使用Google术语“联接表”。
接下来,假设您需要让用户能够喜欢帖子。一个用户可以喜欢许多帖子,而一个帖子可以被许多用户喜欢,从而使之成为“多对多”的关系。通常如何做到这一点是通过具有代表该关系的新表。让我们将表称为“ user_likes_post”。该表将包含以下几列:用户,帖子。这些都是它们对应表的外键。
现在,举个例子:
user_likes_post
user post
1 2
3 5
在这种情况下,您可以说用户“ awesome_user”喜欢由“ less_awesome_user”撰写的帖子“是的,awesome_user”,因为您可以在用户表中查找用户1,并且可以在帖子表中查找帖子2。同样,在编写查询时,可以联接表以实现此目的。
请注意,user_likes_post没有id列。这是因为在这种情况下,我们将使用主键(用户,帖子)而不是(id)。主键可能包含多个列。仅当没有两行的这两列具有相同的值时,才可以这样做。换句话说,允许以下内容:
user post
1 2
1 3
2 2
但是,这是不允许的
user post
1 2
1 2
这对我们很有用,因为这会阻止我们,因为这会阻止双重喜好。也可以通过将id列作为主键并在(用户,帖子)上具有“唯一约束”来完成此操作,但是我们极不可能需要唯一地标识一个“赞”,因此没有意义具有id列,因为这只会浪费空间。值得注意的是,外键也可以由多列组成,因此仍然可以从另一个表中引用一个like。但是,如果您正在考虑这样做,建议您使用id列。
我建议您使用Google下列术语,并确保您理解它们。看起来似乎有些混乱,但是要特别注意数据库的规范化。了解数据库规范化背后的一些原因是设计可靠数据库的关键。例如,如果一条数据位于数据库中的多个位置,那就不好了。它不仅会占用额外的空间,而且如果该数据发生更改,您将需要在每个位置进行更改。如果您有一个带有“用户名”,“密码”,“内容”列的表“ post”,然后用户想要更改其密码,则必须在该用户名中查找post中的所有条目,并更改所有这些条目的密码。如果您意外丢失了一个,可能会导致一些严重的问题。数据库规范化只是设计数据库以避免此类问题的方式的更正式定义。将其视为数据库设计的“最佳实践”;如果您知道自己在做什么,则可以违反规则,但是作为初学者,遵循这些规则将为您节省很多麻烦。
希望这可以使您走上正确的道路,学习如何设计数据库。让我知道您是否想对此进行澄清。祝好运!
首要的关键
外键
约束
唯一约束
一对一关系
一对多关系
多对多关系
联接表
实体关系图
数据库规范化
我是一名优秀的程序员,十分优秀!