我正在设计一个相当复杂的数据库,并且在一个方面很难做出选择。会员可以上传视频,照片和故事,一些免费,一些其他成员将支付。这些照片需要能够用一个名字组合成一组。
我已经决定在成员数据库中增加代表“免费照片集的数量”、“付费照片集的数量”的栏;视频和故事也是如此。
我正在苦苦挣扎的决定是存储集合名称、每组中的数字以及集合的类型。
请记住,如果一组照片中有6,我将需要显示相关的6。同样的视频等。
文件将与编码的标题保存-免费照片,用户标识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 -第一篇文章-我希望这是可读的)
发布于 2013-11-12 19:13:53
选择3是可怕的,现在抹去它。我还建议不要将'number in set‘作为数据库中的一个值。每次插入新照片时,都必须更新相应的编号集值。解决方案不是在数据库中存储聚合值,而是使用脚本中的聚合返回此计数。
我将使用一个“成员”或“用户”表,一个将照片/视频集与您的用户相关联的“set”表(这里包括免费/付费栏)。然后创建一个照片/文件表,将照片与“set”表相关联。每组照片/照片的数量可由
select set_id , count(1) from mediatable group by set_id这将在设定的值中给出这个数字,您将不必担心像这样更新“count”列。
发布于 2013-11-12 19:08:57
不要为每个用户创建新的表,您只需要一个。此外,我不会用编码的标题命名文件,这使得机器人或其他用户很容易在知道方案的情况下逐步遍历文件,而只是保存文件的路径,然后使用随机生成的名称或散列。记住设置Foreign Keys和Indexes以加速JOINS和任何搜索。
SetTypeTBL - SetTypeID, SetTypeName
SetTBL - SetID, SetTypeID, MemberID, SetName
MediaTypeTBL - MediaTypeID, MediaTypeName
MediaTBL - MediaID, MediaTypeID, SetID, MemberID, MediaName, MediaFilePath
https://stackoverflow.com/questions/19937492
复制相似问题