sql - 这种形式的数据库叫什么?

标签 sql database database-design

我是数据库的新手,我正在考虑为网站创建一个数据库。我开始使用 SQL,但我真的不确定我是否使用了正确类型的数据库。

问题是:

http://i.imgur.com/B4ZypkC.png

我现在拥有的是第一个选项。所以这意味着,我的查询看起来像这样:

user_id      photo_id     photo_url
0            0            abc.jpg
0            1            123.jpg
0            2            lol.png

等等。但对我来说,当数据库变大时,这似乎有点低效。所以我想要的是图片中显示的第二个选项。那么像这样的事情:

user_id      photos
0            {abc.jpg, 123.jpg, lol.png}

或者类似的东西:

user_id      photo_ids
0            {0, 1, 2}

我找不到类似的东西,我只找到普通的 SQL。无论如何做这样的事情^(即使它不被认为是“数据库”)?如果不是,为什么 SQL 在这些情况下更有效?我怎样才能让它更有效率? 提前致谢。

最佳答案

您最初使用 user_id, photo_id, photo_url 的方法是正确的。这是大多数数据库管理系统使用的规范化关系。

以下关系称为“一对多”,因为用户可以拥有多张照片。

您可能想要尽可能地分离照片细节,并只提供用户和照片之间的引用表。

第二种方法效率低下的原因是因为数据库并非设计用于在单个列中搜索或存储多个值。虽然可以以这种方式存储数据,但您不应该这样做。

如果您想使用第二种方法为用户定位特定照片,则必须使用 LIKE 进行搜索,这很可能不会使用任何索引。提取或列出这些照片的过程也会很低效。

您可以阅读有关基本数据库原理的更多信息 here .

关于sql - 这种形式的数据库叫什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799168/

相关文章:

mysql - 查找具有相同ID的行并且只保留一行的方法

mysql_install_db 给出 fatal error : Could not find my-default. cnf

sql - 按时间范围删除数据存储中的行

SQLite 比较日期

database - A有很多B,只有一个 'active' B

database-design - 如何设计一个针对多种运动项目的体育统计数据库?

php - 多个数据库或内容较多的表

php - 将数据库与外部表连接

mysql - SQL 重写技巧

PHP SQL JOIN 避免 ID 重复