Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL对基本社交网络进行父/子设计_Sql_Oop_Foreign Keys_Relationship_Social Networking - Fatal编程技术网

使用SQL对基本社交网络进行父/子设计

使用SQL对基本社交网络进行父/子设计,sql,oop,foreign-keys,relationship,social-networking,Sql,Oop,Foreign Keys,Relationship,Social Networking,我正在尝试为社交网络风格的应用程序构建一个简单的结构。但是我对如何设计帖子、评论和媒体之间的关系有点困惑。 简单地说,媒体可以是图像或视频(带枚举)。它包含关于标准图像、缩略图和视频的size和URL信息(根据mediaType枚举)。post可以附加多个媒体。评论可能附带多个媒体。但是当一个媒体在一个地方使用时,它不能在另一个地方使用。没有其他post可以拥有它。任何其他注释都不能包含它。另外,当我实现用户时,他们可以引用图像类型媒体作为他们的个人资料。当有消息功能时,一些媒体可能会附加到消息

我正在尝试为社交网络风格的应用程序构建一个简单的结构。但是我对如何设计
帖子
评论
媒体
之间的关系有点困惑。 简单地说,
媒体
可以是
图像
视频
(带枚举)。它包含关于标准图像、缩略图和视频的
size
URL
信息(根据
mediaType
枚举)。
post
可以附加多个
媒体
评论
可能附带多个
媒体
。但是当一个
媒体在一个地方使用时,它不能在另一个地方使用。没有其他
post
可以拥有它。任何其他
注释
都不能包含它。另外,当我实现
用户
时,他们可以引用图像类型
媒体
作为他们的个人资料。当有
消息
功能时,一些
媒体
可能会附加到
消息
等。因此,我希望事情有点灵活

我不想在多个表中添加关于
thumbnailWidth
thumbnailSize
thumbnailURL
等的特定列,因为这样重复太多了。所以我决定使用一个集中的
媒体
表来保存上传的图像或视频的所有主要信息。 我决定将缩略图和标准图像信息放在同一行,否则会觉得太复杂而无法处理。稍后我可以将
图像
视频
分开,以分开表格

注意:我没有一个评论相互回复的结构。这是后来的一个问题:)

这是当前的设计,没有
媒体
和其他表之间的连接

Media
----------
id
thumbnail_width
thumbnail_height
thumbnail_URL
standard_width
standard_height
standard_URL
media_type ("video" or "image")
source_URL (only used if media_type is "video")
(maybe other columns to be used with "video" type)
user_id (who uploaded the media)

Post
----------
id
title
body
user_id (who sent the post.)

Comment
----------
id
body
post_id (which post has this comment)
user_id

选项1
因此,一个选项是,将
commentId
postId
字段(可为空)放入
media
表中。 如果媒体已连接到帖子,请将帖子放在那里。如果它附加到注释,请对
commentId
执行相同操作。如果其中一个有值,则其他值必须为
null
。但这可能会导致
media
表中的引用列过多,因为随着项目的发展,
media
可能会在很多地方使用

选项2
另一个选项是为每个关系创建表,如

PostMedia
----------
id
post_id
media_id (unique. one-to-one relationship with Media table)

CommentMedia
----------
id
comment_id
media_id (unique. one-to-one relationship with Media table)
但现在,在保存
评论之前,更难检查
帖子中是否使用了媒体。或者反过来说。我们每次都需要检查整个
PostMedia

另一种情况可能是,当用户将
媒体
图像
类型设置为他们的个人资料图片时,我们需要检查它是否用于帖子或评论中。我不确定这个约束,但在某些情况下它可能会派上用场

我可以在
media
表中设置一些
ownerType
枚举。这可能是
post
comment
profilePic
等。只有当
ownerType
post
时,
PostMedia
表才能引用媒体

选项3
集中的
媒体
表格想法很酷,但我认为它有很多复杂性。使用面向对象的设计,我可能只需要创建一个抽象的
media
类,将所有必需的列和方法放在该类中,并将其扩展为
postdedia
CommentMedia
等,这样会更容易处理,但最终会在数据库中产生许多相同的列和类似的表。我不知道这是不是一个好的设计

这里的最佳做法是什么?我可能觉得事情太复杂了,可能有更简单的解决方案。我愿意接受任何建议:)


谢谢

你熟悉实体关系模型和规范化过程吗?如果我需要可视化一些混乱或复杂的模式,我会经常使用ER模型。我不确定“正常化过程”。即使我使用过它,我也可能不知道它的名称:)“这里的最佳实践是什么?”写下所有已知的函数依赖项,并从中生成数据库模式。通过BCNF的所有范式都由它们的函数依赖关系决定。