我正在为以下要求寻找更好的解决方案。
我必须存储用户喜欢的东西,比如 -
- 影
- 名称
- 类型//喜欢科幻,惊悚,喜剧,浪漫
- 网址[如果有]
- 音乐
- 名称
- 类型
- 网址[如果有]
- 菜
- 名称
- 类型
- 网址[如果有]
- 运动
醇>
- 名称
- 类型
- 网址[如果有]
等,
这个最喜欢的名单可以增长更多&对于每个收藏夹。
以上这些列将针对每个喜爱的项目。我目前的解决方案是为每个喜欢的东西创建表格,如[喜欢的电影,喜欢的体育等]。但是,由于这些最喜欢的项目可能会增加,我不想再从MySQL创建另一个表。
所以,我正在寻找解决方案,例如,创建名为just的表,"收藏",以及列: -
- 名称。
- 页面链接。
- 类型。
醇>
这些名字可以是"电影","书籍"等等,并在每部电影"或"书籍",将有所有数据。这些数据将链接到不同的用户。
因此,我需要通过创建更少的表来帮助设置表关系模式。
编程语言,我正在使用: -
答案 0 :(得分:1)
我接近这个的方式。
______________________________________________________________
| UniqueID | FavouriteID | Data | Name | Page Link | Type |
| Int(11) | Int(11) | Blob | varchar | Varchar | Int? |
______________________________________________________________
第二张表
___________________________
| UniqueID | FavouritName |
| INT(11) | VarChar |
___________________________
在表2 UniqueID和表1 FavouritID
之间创建外键通过PHP访问时,我自己使用这组函数
function RDataLink($field, $table, $current=""){
accessDB();
$QTable=mysql_query("SHOW CREATE TABLE $table");
$Table=mysql_result($QTable,0,1);
exitDB();
// CONSTRAINT `jobSeeker_ibfk_1` FOREIGN KEY (`location`) REFERENCES `24_location` (`UID`)
$x=preg_match_all('/FOREIGN[^(]+.[^(]+[^)]+./',$Table,$matches);
foreach ($matches as $array){
foreach ($array as $value){
if(preg_match("/(?<=FOREIGN\sKEY.{3})$field/",$value)){
if (preg_match("/(?<=REFERENCES[^`].)[^`]+/",$value,$ForeignTable)){
accessDB();
$Qrows=mysql_query("SELECT * FROM ".$ForeignTable[0]);
exitDB();
$options="<select name=\"$field\">";
while ($rows=mysql_fetch_array($Qrows,MYSQL_ASSOC)){
$options.="<option value=\"".$rows['UID']."\"".($current==$rows['UID'] ? "selected" : "") .">".$rows['name']."</option>";
}
$options.="</select>";
}
}
}
}
if(!$x){
return false;
}
else {
return $options;
}
}
function RQuery($field,$table,$current){
accessDB();
$QTable=mysql_query("SHOW CREATE TABLE $table");
$Table=mysql_result($QTable,0,1);
exitDB();
$x=preg_match_all('/FOREIGN[^(]+.[^(]+[^)]+./',$Table,$matches);
foreach ($matches as $array){
foreach ($array as $value){
if(preg_match("/(?<=FOREIGN\sKEY.{3})$field/",$value)){
if (preg_match("/(?<=REFERENCES[^`].)[^`]+/",$value,$ForeignTable)){
accessDB();
$Qrow=mysql_query("SELECT name FROM ".$ForeignTable[0]." WHERE UID='$current'");
return mysql_result($Qrow,0);
exitDB();
}
}
}
}
}
可能会考虑一些适用于您的情况。但我希望它有用
答案 1 :(得分:1)
由于电影,音乐......可能具有不同的属性,因此具有有利实体的基表可以用于:
答案 2 :(得分:0)
你可以创建一个主表tbl_favoritemaster
来存储喜欢的项目列表(例如电影,书籍等......)和子表tbl_favoritedetail
来存储用户最喜欢的东西(例如用户明智的电影细节,用户明智的书籍细节等...)。使用此结构,您无需为所有收藏项目列表创建更多表格。
<强> 1。 tbl_favoritemaster 强>
Column List: favoriteId (PK), favoriteName
Data:
| favoriteId | favoriteName |
| 1 | Movie |
| 2 | Book |
<强> 2。 tbl_favoritedetail 强>
Column List: Id (PK), favoriteId (Reference to tbl_favoritesmaster), Name, Type, URL
Data:
| Id | favoriteId | Name | Type | URL |
| 1 | 1 | M1 | T1 | URL1 |
| 1 | 2 | B1 | T2 | URL2 |