Database design 如何存储可以在具有层次结构的三个位置之一设置的数据

Database design 如何存储可以在具有层次结构的三个位置之一设置的数据,database-design,data-structures,entity,Database Design,Data Structures,Entity,抱歉,如果这属于DBA-我不确定 我有3个实体:网站->商店->商店视图。我将有一系列的设置,可以存储在这3个级别中的任何一个。例如,我可以在一个网站级别设置一个主题,它将进入该网站下的所有商店,然后它可以在商店级别设置,这将反过来覆盖该网站。我需要将此信息存储在数据库中,但我不确定表示它的最佳方式 我想到了一些类似于以下列的表格的东西: 名称、值、EntityType、EntityId其中EntityType表示上述实体,而EntityId表示该实体内的Id。这将让我决定实体层次结构,并获得由

抱歉,如果这属于DBA-我不确定

我有3个实体:网站->商店->商店视图。我将有一系列的设置,可以存储在这3个级别中的任何一个。例如,我可以在一个网站级别设置一个主题,它将进入该网站下的所有商店,然后它可以在商店级别设置,这将反过来覆盖该网站。我需要将此信息存储在数据库中,但我不确定表示它的最佳方式

我想到了一些类似于以下列的表格的东西:

名称、值、EntityType、EntityId
其中
EntityType
表示上述实体,而
EntityId
表示该实体内的Id。这将让我决定实体层次结构,并获得由其排序的信息

这是一种可伸缩的方法吗?我似乎想不出一个更好的方法来做到这一点,它不涉及在数据库中有大量重复的列

编辑


我一直在研究继承的表,虽然我可以看到这对联系人/员工等共享共同属性(如FirstName、LastName等)的事情很有用,但我不认为这是一个好主意,因为你可能有很多字段。例如,如果我想实现一个消息处理程序,您可以在其中为每个网站/商店/商店视图设置用户消息,该怎么办?我需要为每条不实用的信息创建一个新专栏。

我们有一个针对项目驱动型组织的ERP系统,具有类似的元素。例如,销售条件可以设置为:

你建议的方法是可行的;我们在某些地方使用它,但确保数据完整性的正确实现需要一些努力。因此,我不建议将其用于一般用途

在所有级别上复制同一列,然后使用第一个适用列更容易,方法是将依赖项链(在您的示例中为:storeview->store->website)冒泡并缓存它

如果您的问题涉及多个设置,您可以引入一个设置容器(类似于上面的销售条件;它包含合同文本,但也包含定价、付款条件等)

如果希望能够在storeview/store/website的每个级别轻松配置每个属性,可以创建一个m:n表,将类似于
PossibleProperties
的表与这三个实体中的每一个连接起来,从而生成
PropertiesOfStoreView
PropertiesOfStore
PropertiesOfWebsite

如果您还希望能够配置任何对象上的每个属性,那么您就有了建议方法的业务案例。但这并不常见。在我们的项目控制系统中,我们只对草稿发票行(因为它们来源于流程、项目、收入、转换、时间表、您了解的情况)、文档(因为它们可以附加到许多表)和消息进行了此操作(因为许多表事件可以生成电子邮件或消息转发给外部消费者)


祝你好运!如果这个答案不能回答你的问题,请告诉我你遗漏了什么。如果是答案,请通过勾选空复选标记让我知道。

抽象,宝贝。检查表继承。哦,听起来很有趣。可以,谢谢。