我有三个表 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。
替代方案是拥有一张可容纳所有人的 table 。这样做的缺点是该表需要 1...n 列来保存电影 ID,并且会有多个列为 NULL。
每个 Person 表的表名本身都是唯一的,所以我想知道是否可以将表名作为 MoviesWatched 中的一个字段,这样我就不必在每部电影的行中重复 PersonID。
最佳答案
您似乎在描述多对多关系。这通常使用联结表来解决:
电影表:
M_ID、职位、导演等...
人员表:
P_ID、姓名等...
电影观看表:
M_ID、P_ID、观看日期
看看我们如何将任意数量的电影与任意数量的人联系起来?因此,“多对多”。
您可以将相同的概念应用于拥有的电影。
我还会加入参照完整性:数据库将对您的数据实现的约束。在这种情况下,MovieWatched.M_ID 应该是 Movies.M_ID 的外键。与 Person.P_ID 类似。这将使您的数据库不会有孤立记录,或者可能存在于 MovieWatched 中但不存在于 Person 或 Movies 中的记录(想象一下删除一个人而不是他们观看的电影)。
如果您只想允许每个人观看每部电影一次,您还可以对 MovieWatched (M_ID, P_ID) 设置唯一约束(这通常发生在联结表中,但如果您本质上想要一个观看电影的日志)。
关于mysql - 表名可以用作另一个表的字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19253095/