php - 适当的数据结构来维护一对多关系

标签 php sql mysql database-design schema

我想在数据库中表示文档。有几种不同类型的文档。所有文件都有某些共同点,但并非所有文件都相同。

例如,假设我有一个基本的文档表...

TABLE docs (
    ID
    title
    content
)

现在假设我有一个文档子集可以属于某个用户,并且可以具有与其关联的附加信息。我可以执行以下操作...

TABLE docs (
    ID
    userID -> users(ID)
    title
    content
    additionalInfo
)

...然而,这将导致表中出现大量空值,因为只有一些 文档可以属于某个用户,而不是全部。因此,我创建了第二个表“ownedDocs”来扩展“docs”:

TABLE ownedDocs (
    docID -> docs(ID)
    userID -> users(ID)
    additionalInfo
)

我想知道:这是正确的做法吗? (我很担心,因为虽然一切都在一个表中,但文档和用户之间存在一对多关系。但是,通过创建一个新表 ownedDocs,数据结构看起来我在文档之间存在多对多关系和用户——这永远不会发生。)

预先感谢您的帮助

最佳答案

the datastructure looks like I have a many-to-many relationship between docs and users - which will never occur.

明白了,那么你需要在docs表中有userid来确保一对多的关系(一个用户,可能有很多文档)。

如果文档未关联到特定用户,我不认为附加信息列为空有什么害处,由 userid 列为空表示。将附加信息拆分到另一个表仍然意味着一对一的关系,因此您最好使用一个包含文档、用户和附加信息的表...

关于php - 适当的数据结构来维护一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3632792/

相关文章:

php clone 无法正常工作

php - 无法使用php更新mysql数据库

sql - 生成一个随机的 9 位数字

sql - 关于计算列的新手 SQL 问题

mysql 选择联合所有日期值不正确

javascript - 如何在javascript中混合php?

php - 如何让 set_error_handler() 调用对象上的方法?

SQL DELETE - 最大行数

MySQL 用户主机网络

php - Laravel 5 使用原始查询将结果获取到数组