伙计们,如果有人能帮我,我会非常感激的。我有一个模式,其中有4个表与本问题书、组、阅读列表和注释相关。系统的用户可以加入一个组并将书籍添加到该组的阅读列表中。组的图书列表由表readinglist表示:

ReadingList
-------------
Id (auto_increment)
ReadingListID
BookID (pk)
GroupID (pk)

bookid和groupid被设置为复合主键,以确保没有一本书可以在组阅读列表中出现两次。这两个字段都为相关的账簿/组定义了FK。现在,当试图在comments表和readinglist之间建立关系时,我的问题来了。理论上,reading list中的每个唯一条目都可以有许多注释(1..*),因此基本上,组阅读列表中的一本书可以有许多与in相关联的注释。注释表如下所示:
Comments
-----------
Id (pk, auto_increment)
ReadingListID
UserName
Comment
TimeStamp

我的逻辑是将fk从comments(readinglistid)设置为readinglist(readinglistid),但由于出现“referenced table中没有主键或候选键”错误,我明显有缺陷。
我尝试了很多方法,比如将comments表中的readinglist id&id设置为复合键,将readinglistid设置为readinglist表中的pk等等,但是我就是没法理解。如果我还不够清楚,请告诉我。
非常感谢!

最佳答案

您可以使用将readinglist的主键从composite(bookid+groupid)更改为readinglistid列,然后您的fk将工作。然后可以在bookid+groupid列之间创建一个唯一的约束或索引,以强制实现该数据完整性。
不过,我很困惑,为什么在readinglist(id)上有一个自动增量,它独立于readinglistid列。也许你应该放下一个或另一个。在我看来,架构的设置方式可能是readinglist.id是pk,comments.readinglistid是该列的fk。

关于database - 一对多数据库关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5569711/

10-12 16:36