Database design 数据库模式设计中的问题

Database design 数据库模式设计中的问题,database-design,uml,database-schema,entity-relationship,er-diagrams,Database Design,Uml,Database Schema,Entity Relationship,Er Diagrams,开发者和数据库设计师,大家好 我为我的项目设计了一个数据库模式 该项目涉及“生产者”和“消费者”之间的关系。但如果“生产者”可能既是“用户”又是“组织”,那么“消费者”可能只是“用户”(尽管它只是刚刚出现)。如果要考虑我的项目的对象模型,它主要包括两个基本接口——“生产者”和“消费者”。关系将在“组织”和“用户”这两个主要类的实例之间,更重要的是,“组织”类实现“生产者”接口,“用户”类实现“生产者”和“Сonsumer”接口。例如,在使用我的应用程序的某段时间内,某些用户必须能够向其他用户销售

开发者和数据库设计师,大家好

我为我的项目设计了一个数据库模式

该项目涉及“生产者”和“消费者”之间的关系。但如果“生产者”可能既是“用户”又是“组织”,那么“消费者”可能只是“用户”(尽管它只是刚刚出现)。如果要考虑我的项目的对象模型,它主要包括两个基本接口——“生产者”和“消费者”。关系将在“组织”和“用户”这两个主要类的实例之间,更重要的是,“组织”类实现“生产者”接口,“用户”类实现“生产者”和“Сonsumer”接口。例如,在使用我的应用程序的某段时间内,某些用户必须能够向其他用户销售商品,并且能够从任何人那里购买商品

在未来,我计划将最需要的支付系统集成到项目中。请告诉我,如果你有支付系统的工作经验,它将如何改变模型和数据库模式。是否需要添加“法人实体”和“个人”实体

我根据上面的描述设计了ER图,但它有几个缺点

首先,ER描述和UML描述之间没有完全的对应关系。我需要为接口分配分离的表吗?我不知道。事实上,在这种情况下,根据ER描述,可以说“生产者”和“消费者”是“组织”和“用户”的超类。但事实上,它们只是接口

其次,我需要最简单的设计来提供足够灵活的存储访问,而不需要不必要的“连接”。也许我应该完全放弃接口实现?但我完全支持使用OOP财富。是否可以在数据库级别使用接口实现?我知道继承是可以利用的。但我不知道这些技巧将如何影响生产率——因为以前的所有项目都不需要使用超类和接口。我将使用PostgreSQL作为关系数据库管理系统

请分享您的成功数据库方案的经验和实施

更新

如果我要为表'Producer'和'Consumer'分配角色,那么我必须为它们提供表征实体'User'和'Organization'的属性。一方面,如果角色的数量增加,那么属性的数量也会增加。此路径会导致表属性的拥塞。不同角色的某些属性将符合空值。另一方面,一个角色的一个属性可以与另一个角色的多个属性一致。例如,实体“Organization”的属性“name”与实体“User”的属性“firstname”、“middlename”、“lastname”和“username”一致。第三,我仍然希望将模型“生产者”、“组织”、“用户”和“消费者”彼此分开


可能有很多方法,但没有一种是最佳的。所以作为一个架构师,你需要权衡一个架构的不同优点和缺点。我可能会从构建数据库抽象开始。在这里,它取决于您需要对象的持久性的程度。也就是说,我是否需要即时持久性,或者它是否足够好,可以在后台使用一些阴影

所以基本上你有依赖于相应类的表。您可以简单地对如何实现这种依赖性保持开放。某些编程语言提供了将一种语言映射到另一种语言的框架。这很方便,并且节省了大量的打字/设计工作。当然,它不是很灵活。因此,在此基础上,你应该考虑各种选择。是否有必要在类内部实现数据库访问,并让它们实现一些序列化程序接口

这肯定会提供很多调整和性能选项。但是,您可能也会有一些实现开销

或者,最好有一些跟踪机制,您可以订阅并同时保存您的状态


因此,为了获得正确的设计决策,您需要考虑对象和数据库之间的关系以及这种绑定需要有多强。不幸的是,没有什么灵丹妙药。

我认为你正在努力解决的是“角色”这个话题。这是一个非常普遍的问题。一个人可以扮演很多角色。这并不能使一个人成为一种角色,因为这意味着必须始终如此。你可能会发现,建立角色扮演关系可以解决问题,但我还没有时间仔细分析你的问题。你也可能会发现qua实体(例如,作为制作人的人)有助于维护历史和其他事实。确实很棘手。吉姆说的是对的。我可能会在晚上晚些时候研究这个问题(除非吉姆提供了一个好的答案)。事实上,我认为你一次问的问题太多了。我数了四个明确的问题和几个更隐含的问题。一切都源于问题领域中存在的不准确模型。我建议你解决那个问题。UML和ER可以很容易地与之对齐。事实上,一个UML模型可以为OOP和DB提供基础。完全同意Jim的观点。“在未来,我正在计划……”是一个全新的故事。你可能会单独问这个问题,但有可能因为范围太广而结案。试试看。我现在会考虑你的第一个和第二个(我认为后一个也是另一个故事;所以希望第一个得到答案)。你的更新对我来说毫无意义。这不是一个关于如何进行分析和设计的反复教训的论坛。请提出一个新的、直截了当的问题,不需要一本书的章节来回答。