相关疑难解决方法(0)

如何在数据库中表示继承?

我正在考虑如何在SQL Server数据库中表示复杂的结构.

考虑一个需要存储一系列对象细节的应用程序,这些对象共享一些属性,但有许多其他属性不常见.例如,商业保险计划可能包括同一保单内的责任,汽车,财产和赔偿保险.

在C#等中实现它是微不足道的,因为您可以创建一个带有Sections集合的Policy,其中Section是根据各种类型的封面所需继承的.但是,关系数据库似乎不容易这样做.

我可以看到有两个主要选择:

  1. 为所有可能的变体创建一个Policy表,然后是一个Sections表,其中包含所需的所有字段,其中大部分都是null.

  2. 创建一个Policy表和许多Section表,每个表对应一种封面.

这两种替代方案似乎都不令人满意,特别是因为必须在所有Sections中编写查询,这将涉及大量连接或大量空检查.

这种情况的最佳做法是什么?

sql database inheritance database-design class-table-inheritance

209
推荐指数
5
解决办法
9万
查看次数

如何为用户定义的字段设计数据库?

我的要求是:

  • 需要能够动态添加任何数据类型的用户定义字段
  • 需要能够快速查询UDF
  • 需要能够基于数据类型对UDF进行计算
  • 需要能够根据数据类型对UDF进行排序

其他信息:

  • 我主要是在寻找表现
  • 有几百万条Master记录可以附加UDF数据
  • 当我上次检查时,我们当前的数据库中有超过50mil的UDF记录
  • 大多数情况下,UDF仅附加到几千个Master记录中,而不是全部记录
  • UDF未加入或用作键.它们只是用于查询或报告的数据

选项:

  1. 使用StringValue1,StringValue2创建一个大表... IntValue1,IntValue2,...等我讨厌这个想法,但如果有人能告诉我它比其他想法更好,为什么会考虑它.

  2. 创建一个动态表,根据需要按需添加新列.我也不喜欢这个想法,因为除非你索引每一列,否则我觉得性能会很慢.

  3. 创建一个包含UDFName,UDFDataType和Value的表.添加新的UDF时,生成一个View,它只提取该数据并将其解析为指定的任何类型.不符合解析标准的项返回NULL.

  4. 创建多个UDF表,每种数据类型一个.所以我们有UDFStrings,UDFDates等的表.可能和#2一样,并且只要添加新字段就自动生成View

  5. XML数据类型?我之前没有使用过这些,但已经看过它们了.不确定他们是否会给我我想要的结果,尤其是性能.

  6. 别的什么?

sql database database-design user-defined-fields

138
推荐指数
7
解决办法
5万
查看次数

如何为每种产品都有很多参数的多种产品设计产品表

我在桌面设计方面没有太多经验.我的目标是创建一个或多个满足以下要求的产品表:

  • 支持多种产品(电视,手机,PC,......).每种产品都有不同的参数集,例如:

    • 手机将有颜色,尺寸,重量,操作系统......

    • PC将有CPU,HDD,RAM ......

  • 参数集必须是动态的.您可以添加或编辑您喜欢的任何参数.

如果没有针对每种产品的单独表格,我如何满足这些要求?

database-design relational-database database-schema

127
推荐指数
3
解决办法
5万
查看次数

你如何有效地模拟数据库中的继承?

在数据库中建模继承的最佳实践是什么?

权衡取舍(例如可疑性)是什么?

(我对SQL Server和.NET最感兴趣,但我也想了解其他平台如何解决这个问题.)

.net sql-server oop inheritance database-design

124
推荐指数
5
解决办法
5万
查看次数

什么是在对象中仅允许一个非null字段的好方法

我想编写一个类,其中包含不止一种类型的多个字段,但是在任何时候,实例对象中只有一个字段具有非null值。

到目前为止,我所做的事情看起来并不十分干净。

class ExclusiveField {

    private BigInteger numericParam;
    private String stringParam;
    private LocalDateTime dateParam;

    public void setNumericParam(BigInteger numericParam) {
        unsetAll();
        this.numericParam = Objects.requireNonNull(numericParam);
    }

    public void setStringParam(String stringParam) {
        unsetAll();
        this.stringParam = Objects.requireNonNull(stringParam);
    }

    public void setDateParam(LocalDateTime dateParam) {
        unsetAll();
        this.dateParam = Objects.requireNonNull(dateParam);
    }

    private void unsetAll() {
        this.numericParam = null;
        this.stringParam = null;
        this.dateParam = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Java是否以某种方式支持此模式,或者有更合适的方法来实现?

java

33
推荐指数
3
解决办法
3042
查看次数

(数据库设计 - 产品属性):什么是产品属性数据库设计的更好选择?

我是数据库设计的新手.对于cms的产品属性数据库设计有什么更好的选择?(请另外建议其他选项).

选项1:1表

products{
id
product_name
color
price
attribute_name1
attribute_value1
attribute_name2
attribute_value2
attribute_name3
attribute_value3
}
Run Code Online (Sandbox Code Playgroud)

选项2:3表

products{
id
product_name
color
price
}

attribute{
id
name
value
}

products_attribute{
products_id
attribute_id
}
Run Code Online (Sandbox Code Playgroud)

谢谢你,约瑟夫

database-design relational-database entity-attribute-value

9
推荐指数
1
解决办法
1万
查看次数

如何克服EAV数据库报告的缺点?

SQL中的Entity-Attribute-Value数据库设计的主要缺点似乎都与能够高效,快速地查询和报告数据有关.我读到的关于该主题的大部分信息都警告不要因为这些问题而实施EAV以及几乎所有应用程序的查询/报告的共性.

我目前正在设计一个系统,其中一个实体的字段在设计/编译时是未知的,并由系统的最终用户定义.EAV似乎非常适合这个要求,但由于我所读到的问题,我对实施它犹豫不决,因为这个系统也有一些非常繁重的报告要求.我我已经找到了解决这个问题的方法,但是想向SO社区提出这个问题.

鉴于典型的规范化数据库(OLTP)仍然不总是运行报告的最佳选择,一个好的做法似乎是拥有一个"报告"数据库(OLAP),其中来自规范化数据库的数据被复制到,广泛索引,以及可能非规范化以便于查询.是否可以使用相同的想法来解决EAV设计的缺点?

我看到的主要缺点是将数据从EAV数据库传输到报告的复杂性增加,因为您可能最终必须在EAV数据库中定义新字段时更改报告数据库中的表.但这几乎是不可能的,并且似乎是EAV设计提高灵活性的可接受的权衡.如果我使用非SQL数据存储(即CouchDB或类似的)用于主数据存储,这种缺点也存在,因为所有标准报告工具都期望SQL后端进行查询.

如果您有一个单独的报告数据库用于查询,那么EAV系统的问题是否会消失?

编辑:感谢您的评论到目前为止.我正在研究的系统的一个重要事项是,我真的只是在谈论为其中一个实体使用EAV,而不是系统中的所有实体.

系统的全部要点是能够从多个不同的源提取数据,这些数据是提前未知的,并且会对数据进行处理以获得关于特定实体的一些"最知名"数据.因此,我正在处理的每个"领域"都是多值的,我还需要跟踪每个领域的历史记录.对于这种情况的标准化设计最终是每个字段1个表格,这使得查询它无论如何都很痛苦.

以下是我正在查看的表格模式和示例数据(显然与我正在处理的内容有所不同,但我认为它很好地说明了这一点):

EAV表

Person
-------------------
-  Id - Name      -
-------------------
- 123 - Joe Smith -
-------------------

Person_Value
-------------------------------------------------------------------
- PersonId - Source - Field       - Value         - EffectiveDate -
-------------------------------------------------------------------
-      123 -    CIA - HomeAddress - 123 Cherry Ln -    2010-03-26 -
-      123 -    DMV - HomeAddress - 561 Stoney Rd -    2010-02-15 -
-      123 -    FBI - HomeAddress - 676 Lancas Dr -    2010-03-01 -
------------------------------------------------------------------- …
Run Code Online (Sandbox Code Playgroud)

architecture database-design system-design entity-attribute-value

7
推荐指数
2
解决办法
2421
查看次数