Don';我不知道mysql的正确方法


Don't know the right way on mysql

我要制作一个网站,在此之前我要制作数据库表。问题是如何正确地做。抱歉,我是PHP和Mysql的新手。我只有一定数量的类别,所以这是我的DB视图:

--------------------
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",这是浪费空间。

我怎样才能用正确的方法呢?顺便说一句,我见过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 |
-----------------------

我不明白它是怎么变成那样的。有人能告诉我如何这样做吗?或者有比我更好的主意吗?

通常情况下,将结构化数据存储在表中的单个列中是"no"。Wordpress的例子正是这样做的;它在类别列中存储一个以逗号分隔的类别列表。因此,我不建议使用该模式。

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

表:视频----------------id int名称varchar位置varchar----------------表:类别----------------id int名称varchar----------------表:video_category---------------------video_id intcategory_id int---------------------

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

通常使用第三个表来显示视频和类别之间的关系。所以你会有一个categories_videos表,它有id、category_id和视频id

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