ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 适当的数据结构,以保持一对多的关系

2019-06-06 21:03:18  阅读:155  来源: 互联网

标签:php mysql sql 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,数据结构看起来像我在docs之间有多对多的关系和用户 – 永远不会发生.)

在此先感谢您的帮助

解决方法:

“by creating a new table ownedDocs,
the datastructure looks like I have a
many-to-many relationship between docs
and users – which will never occur.)”

如果将OwnedDocs.DocId设为主键,则很明显1:N关系是不可能的.

零或一对一关系的建模是棘手的.如果我们只有一个子类型,那么具有NULL列的单个表是一种合理的方法.但是,最好确保仅在适当时填充子类型属性.在给定的示例中,这意味着检查约束以强制执行此规则:

check (userID is not null or AdditionalInfo is null)

或者甚至可能是这条规则:

check ( (userID is not null and AdditionalInfo is not null)
        or (userID is null and AdditionalInfo is null) )

属性之间的关系不会显示在ERD中(除非您使用命名约定).当然,在第二种情况下,所拥有文件的AdditionalInfo的强制性质不会很明显.

一旦我们有几个这样的子类型,单独表格的情况变得引人注目,特别是如果子类型构成弧形,例如文档可以是FinancialDocument,也可以是MedicalDocument或PersonnelDocument,但不能超过一个类别.我曾经使用一个包含大量空列,视图和检查约束的表来实现这样的模型.那太差了.子类型表肯定是要走的路.

标签:php,mysql,sql,database-design,schema
来源: https://codeday.me/bug/20190606/1189938.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有