不知道在mysql

时间:2015-11-08 04:09:41

标签: php mysql wordpress

我要创建一个网站,在此之前我将创建一个数据库表。问题是如何正确地做到这一点。对不起,我是PHP和Mysql的新手。我只有一定数量的类别,所以这是我的数据库视图:

--------------------
Video_name   Varchar
Video_loc    Varchar
cat1         Boolean
cat2         Boolean
cat3         Boolean
cat4         Boolean
cat5         Boolean
cat6         Boolean
cat7         Boolean
--------------------

我保持这样,因为1个视频可能属于2个或更多类别。但从长远来看,它将占用大量空间。如果视频属于cat2& cat5然后布尔值将具有值" 1"。但其他人也会有价值" 0"这是浪费空间。

我怎样才能以正确的方式做到这一点? BTW我见过Wordpress,它给类别一个唯一的ID然后在主表上它为多个类别指定了多个id,例如:它保持如下:

-----------------------
id | title | category |

1  | Lorem | 2,4,8,16 |
2  | Epsum | 2,9,8,20 |
3  | Losum | 2,4,9,5  |
4  | Eprum | 2,10,8,1 |
-----------------------

我不知道它是怎么做到的。谁能告诉我怎么做这个或者比我更好的想法呢?

2 个答案:

答案 0 :(得分:5)

一般来说,这是一个" no no"将结构化数据存储在表中的单个列中。 Wordpress示例就是这样做的;它在类别列中存储逗号分隔的类别列表。因此我不建议使用该架构。

"对"这样做的方法是有一个视频表和另一个类别表。视频和类别之间的关系由第三个表管理,该表将视频映射到一个类别,反之亦然。此视频到类别表中将有多个条目 - 每个类别可以分配一个视频。像这样:

table: video
----------------
id       int
name     varchar
location varchar
----------------

table: category
----------------
id       int
name     varchar
----------------

table: video_category
---------------------
video_id          int
category_id       int
---------------------

另一种方法是使用bit field作为类别。然后,对于所有类别,您的视频表只有一列,对于视频所属的类别,其位设置为1,而对于那些不属于的类别,则为0。如果存储空间对您来说非常重要,这是一个选项,但是它不如使用3个表那么灵活,我建议采用后一种方法。

答案 1 :(得分:1)

通常,您使用第3个表格,其中包含视频和类别之间的关系。所以你有一个categories_videos表,其中包含id,category_id和video id

您可以进行连接以获取与材料相关的所有类别,但这是更高级的MySQL。要么开始阅读MySQL文档,要么选择一个框架来帮助您完成所有这些并使其更容易,我总是推荐Cakephp。