我要创建一个网站,在此之前我将创建一个数据库表。问题是如何正确地做到这一点。对不起,我是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 |
-----------------------
我不知道它是怎么做到的。谁能告诉我怎么做这个或者比我更好的想法呢?
答案 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。