我的问题是关于数据库设计及其原则。我正在开发一个将对象映射到数据库表的 Python 应用程序。
我有Projects
和People
对象,映射到它们各自的表。然后我有Messages
, 也映射到它自己的表。
Amessage
可以属于person
(人员表)或project
(项目表)(n-1)。
我的问题:
我是否应该创建两列——
belongs_to_id
和belongs_to_type
——用于消息和查询以获取它们?或者;我应该为每个人创建一个关联表 -- people_have_messages 和项目有消息吗?
在这种情况下,正确的工作方式是什么?
如果选择第一个选项,如何创建 FK 约束和约束?
我的问题是,由于项目和人员(人员表)都可以具有相同的 PK(id),因此不说明表就不足以引用,而且我不知道到底该做什么。
表:
People:
--------------
ID (PK unique)
Name
Projects:
--------------
ID (PK unique)
Title
Description
Message:
--------------
ID (PK unique)
Text
我会说这取决于人员和项目之间是否存在联系?
根据您提到的内容,我会适当地使用 a:
Projects -> ProjectsToMessage <- Message
和People -> PeopleToMesseage <- Message
类型结构(你的要点 2)
除非项目和人员之间存在关系,在这种情况下,您可能最终会遇到一些数据库不喜欢的循环依赖。但是在那种情况下,我会质疑消息是否可以在不通过人员的情况下与项目相关联。
我认为与创建 2 个不同的表相比,第一个选项是正确的,因为创建更多表然后对它们使用“JOIN”查询对于数据库来说似乎是相当昂贵的过程(即在性能方面代价高昂)