【发布时间】:2013-10-08 16:20:02
【问题描述】:
我有三个表 Movies、MoviesWatched、Person1....n
Movies table:
M_ID, Title, Director, etc..
MovieWatched table:
M_ID, DateWatched, (Person who watched movie)
Person1...n table:
MovieOwned(Same as M_ID), NumberOfViews, ________
基本上,对于每个用户,都会创建一个单独的 Person 表,其中包含其电影库中存在的 MovieID。我正在尝试找到一种将 MovieWatched 表链接到 Person1...n 表的方法。到目前为止,我看到的唯一方法是为行中的每部电影设置一个 P_ID。我正在寻找另一种方法,因为这会使每个 Person 表行始终包含相同的 P_ID。
另一种选择是有一张可以容纳所有人的桌子。这样做的缺点是该表需要 1...n 列来保存movieID,并且会有多个列保留为 NULL。
每个 Person 表在表名本身中都是唯一的,所以我想知道是否可以将表名作为 MoviesWatched 中的一个字段引用,这样我就不必在每部拥有的电影的行中重复 PersonID。
【问题讨论】:
-
非常糟糕的设计。有一个带有字段的
person表,用于标识记录属于哪个人。那么你的问题就变得没有意义了。作为一般经验法则,任何需要基于数据库中其他字段的多个表的设计都可以使用单个表更容易地完成,并将“其他字段”值作为字段放入一个表中。 -
非常糟糕的设计。这将导致维护噩梦,根本没有理由这样做。
-
我的理由是防止多个字段保留为 NULL。我对数据库设计非常陌生,我认为如果我使用多个表进行操作,整个数据库会更小,因为每部电影都不会有多个列为空。使用一张表,设计将类似于:P_ID,Movie1.....n = M_ID。这还是更好的做法吗?
-
嗯,我这样做的原因是每个用户都可以从电影表中提取他们自己的电影列表,其中包含电影。我需要某种方式列出每个人在他们自己的个人电影列表中拥有的电影。一个 people 表将包含与 movies 表中的行一样多的列。
-
@user2780385 你走在正确的轨道上。请参阅我的答案以了解您应该考虑的内容。 :)
标签: mysql sql sql-server database