Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Database 何时在db表中包括相关字段,何时不包括?_Database_Database Design - Fatal编程技术网

Database 何时在db表中包括相关字段,何时不包括?

Database 何时在db表中包括相关字段,何时不包括?,database,database-design,Database,Database Design,我有一个“帖子”表,我想记录每个帖子的评分。通常,我会在同一个表中添加一个带有int值的评级字段,该表引用另一个保存实际评级数据的“评级”表。删除该评级字段并根据postID直接从评级表中调用评级有什么问题吗?Posts表不会直接引用评级,但评级表引用了post ID。哪种方式更好/正确。tia我认为您刚刚对良好的数据库设计有所了解。第二种方法是正确的,评级表有一个外键PostId,它引用回Posts表 我不确定第一种方法实际上是如何工作的,在Posts表中是否有引用评级表中多行的单个评级字段?

我有一个“帖子”表,我想记录每个帖子的评分。通常,我会在同一个表中添加一个带有int值的评级字段,该表引用另一个保存实际评级数据的“评级”表。删除该评级字段并根据postID直接从评级表中调用评级有什么问题吗?Posts表不会直接引用评级,但评级表引用了post ID。哪种方式更好/正确。tia

我认为您刚刚对良好的数据库设计有所了解。第二种方法是正确的,评级表有一个外键PostId,它引用回Posts表


我不确定第一种方法实际上是如何工作的,在Posts表中是否有引用评级表中多行的单个评级字段?你的评分是否有一个非唯一的参考?无论哪种方式,这都不是好的做法,仔细阅读规范化,你就会明白了。

我认为你刚刚对良好的数据库设计有所了解。第二种方法是正确的,评级表有一个外键PostId,它引用回Posts表


我不确定第一种方法实际上是如何工作的,在Posts表中是否有引用评级表中多行的单个评级字段?你的评分是否有一个非唯一的参考?无论哪种方式,这都不是好的做法,仔细阅读规范化,你就会明白。你应该直接在posts表中包含rating字段。这是一个问题,如果你分开这个值,你将一无所获,因为没有函数依赖关系

在某些罕见的情况下,您可能会将这些字段添加为单独的表。例如,如果必须将评级值添加到现有表中,并且由于任何原因无法添加新列

或者,如果行非常大且更改非常不频繁,而评级值更改非常频繁,则可以获得一些性能

但我不会说你的案子不属于这两类;所以只要把它放在posts表中就行了


我将总结一些常见情况

Posts
========
PostId           Ratings
Text             ==========
RatingId  ====>  RatingId
                 RatingName
如果您有一组可能的评分值,例如“好”、“一般”和“差”,并且所有帖子都共享此值,请使用此选项。RatingValue将是由id标识的字符串

如果评级值是一个简单的数字,只需将其包含在posts表中即可。这可能是你的观点为什么要包含整数评级值而不是带有评级名称的字符串?区别如下。应包括整数评级,因为每个值都是合法评级。这对于字符串评级是不正确的。它们应该移动到一个单独的表中,因为只有一组有限的字符串表示合法评级

Posts
===========
PostId
Text
RatingValue
如果你在每篇文章中都有多个评分,那么以下是获得有限可能评分的方法

Posts            PostRatings
========         ===========        Ratings
PostId    <====  PostId             ===========
Text             RatingId     ===>  RatingId 
                                    RatingName
发布后评级
============================收视率
职位等级
评级名称
如果你有整数评分,你把他们放回后评分表。如果因为没有自然主键而需要,则需要添加一个人工主键

                 PostRatings
Posts            ==============
========         [PostRatingId]
PostId    <====  PostId
Text             RatingValue
后评级
职位==============
==========[PostRatingId]

posted您应该在posts表中直接包含评级字段。这是一个问题,如果你分开这个值,你将一无所获,因为没有函数依赖关系

在某些罕见的情况下,您可能会将这些字段添加为单独的表。例如,如果必须将评级值添加到现有表中,并且由于任何原因无法添加新列

或者,如果行非常大且更改非常不频繁,而评级值更改非常频繁,则可以获得一些性能

但我不会说你的案子不属于这两类;所以只要把它放在posts表中就行了


我将总结一些常见情况

Posts
========
PostId           Ratings
Text             ==========
RatingId  ====>  RatingId
                 RatingName
如果您有一组可能的评分值,例如“好”、“一般”和“差”,并且所有帖子都共享此值,请使用此选项。RatingValue将是由id标识的字符串

如果评级值是一个简单的数字,只需将其包含在posts表中即可。这可能是你的观点为什么要包含整数评级值而不是带有评级名称的字符串?区别如下。应包括整数评级,因为每个值都是合法评级。这对于字符串评级是不正确的。它们应该移动到一个单独的表中,因为只有一组有限的字符串表示合法评级

Posts
===========
PostId
Text
RatingValue
如果你在每篇文章中都有多个评分,那么以下是获得有限可能评分的方法

Posts            PostRatings
========         ===========        Ratings
PostId    <====  PostId             ===========
Text             RatingId     ===>  RatingId 
                                    RatingName
发布后评级
============================收视率
职位等级
评级名称
如果你有整数评分,你把他们放回后评分表。如果因为没有自然主键而需要,则需要添加一个人工主键

                 PostRatings
Posts            ==============
========         [PostRatingId]
PostId    <====  PostId
Text             RatingValue
后评级
职位==============
==========[PostRatingId]

posted对我来说,混淆之处在于我将“post”视为具有评级的对象。当我将数据映射到域对象时,rating字段将是rating表中找到的rating name的id。这听起来像是您有一组可能的rating值,例如good、average、poor。您希望为每个帖子分配这样的评级。这是一个多对多映射,您实际上需要三个表来表示它。我感到困惑的是,我将“post”视为具有评级的对象。当我将数据映射到域对象时,rating字段将是rating表中找到的rating name的id