1

我正在设计一个相当复杂的数据库,并且正在努力在一个方面做出选择。会员可以上传视频、照片和故事,有些是免费的,有些则需要付费。照片需要能够以名称分组。

我已经决定在会员数据库中添加代表“免费照片集数量”、“付费照片集数量”的列;视频和故事也是如此。

我正在努力的决定是存储集合名称、每个集合中的数字和集合类型。

请记住,如果一组照片中有 6 张,我将需要展示相关的 6 张。视频等也是如此。

文件将使用编码标题保存 - 免费照片、用户 ID 2、设置 3、图片 4 将保存为 FP020304.jpg(仅作为示例),这就是我知道要回忆哪些内容的方式。

选项 1:每个成员额外一张表格,包含以下列(代表):

示例条目是:

SET-ID | SetType    | SetName  | NumberInSet    
1      | freephotos | holiday  | 10
2      | paidphotos | birthday | 6

选择 2:相同,但只有一张表适用于所有成员,仅在列中添加了“MemberID”

选择 3:每种类型一张桌子,每个会员一张桌子,例如一张免费照片,另一张付费等。

选项 4:与 3 相同,但添加了成员​​ ID 列。(仅限 6 张桌子)

到目前为止的想法:选择 3 似乎最容易做查询,但我不确定我是否喜欢为每个新成员添加 6 个表的想法。选择 4 似乎是最合乎逻辑的,因为只有 6 个表,但提取相关信息会比较棘手。选择 1 和 2 导致每个成员的新表减少,但获得结果似乎也更棘手

我并不反对更棘手的解决方案,但我只是无法决定哪种方案最适合这种情况 - 事实上,我确信还有其他方法我还没有想到。

建议将不胜感激。

(nb - 第一篇文章 - 我希望这能清晰易读)

4

2 回答 2

1

选择3太可怕了,现在删除它。我还建议不要将“集合中的数字”存储为数据库中的值。每次插入新照片时,都必须更新相应的 numberinset 值。解决方案不是在数据库中存储聚合值,而是在脚本中使用聚合来返回此计数。

我会选择一个“成员”或用户表,一个将照片/视频集与您的用户相关联的“集合”表(包括免费/付费作为这里的一列)。从那里创建将照片与“设置”表相关联的照片/文件表。每组照片/视频的数量可由下式确定

 select set_id , count(1) from mediatable group by set_id

这将为您提供设定值中的数字,您不必担心更新这样的“计数”列。

于 2013-11-12T19:13:53.317 回答
0

不要为每个用户创建新表,您只需要一个。此外,我不会使用编码标题命名文件,这使得机器人或其他用户可以轻松地在他们知道方案的情况下逐步浏览文件,而只需保存文件的路径并使用随机生成的名称或哈希。请记住设置Foreign KeysIndexes加快JOINS您将执行的任何搜索。

SetTypeTBL -SetTypeID, SetTypeName

设置TBL -SetID, SetTypeID, MemberID, SetName

媒体类型TBL -MediaTypeID, MediaTypeName

媒体TBL -MediaID, MediaTypeID, SetID, MemberID, MediaName, MediaFilePath

于 2013-11-12T19:08:57.697 回答