相关疑难解决方法(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万
查看次数

数据库设计 - 文章,博客文章,照片,故事

我正在为一个网站设计一个数据库,该网站至少会有4种不同的对象类型(文章,博客文章,照片,故事),每个对象都有不同的数据要求来保证自己的表格.我们希望用户能够发布任何这些类型的评论.评论的数据要求很简单,与评论所关注的事物类型无关(即只是评论主体和作者的电子邮件).

我想避免为注释创建和管理4个以上的单独表的冗余,所以我希望能够在一个表中保存所有注释,可能通过2列指定关系:一个用于指定父实体和一个对于父行Id.

但是我不明白我是如何实现外键的,因为外键在2和2个表之间建立关系(对吗?).

因此,考虑到所有这些,最好的方法是什么?

database-design

23
推荐指数
2
解决办法
9301
查看次数

跨多个表的SQL唯一约束

我试图在多个表中创建一个唯一约束.我在这里找到了类似的问题,但是他们并没有完全捕捉到我想要做的精神.

作为一个例子,我有三个表,t_Analog,t_Discrete,t_Message

CREATE TABLE t_Analog(
    [AppName] [nvarchar](20) NOT NULL,
    [ItemName] [nvarchar](32) NOT NULL,
    [Value] [float] NOT NULL,
    CONSTRAINT [uc_t_Analog] UNIQUE(AppName, ItemName)
)

CREATE TABLE t_Discrete(
    [AppName] [nvarchar](20) NOT NULL,
    [ItemName] [nvarchar](32) NOT NULL,
    [Value] [bit] NOT NULL,
    CONSTRAINT [uc_t_Discrete] UNIQUE(AppName, ItemName)
)

CREATE TABLE t_Message(
    [AppName] [nvarchar](20) NOT NULL,
    [ItemName] [nvarchar](32) NOT NULL,
    [Value] [nvarchar](256) NOT NULL,
    CONSTRAINT [uc_t_Message] UNIQUE(AppName, ItemName)
)
Run Code Online (Sandbox Code Playgroud)

我的目标是在所有3个表中使AppName和ItemName唯一.例如,应用程序X中的项目名称Y不能同时存在于模拟和离散表中.

请注意,这个例子是设计的,每个Type的实际数据是不同的,大到足以组合表并添加一个非常难看的Type列.

如果您对此方法有任何建议,我很乐意听到他们的意见!

----开始编辑2012-04-26 13:28 CST ----

谢谢大家的答案!

似乎可能有理由修改此数据库的架构,这很好.

将表组合到单个表中实际上并不是一个可行的选项,因为每个类型的列数量不超过30个(不幸的是,修改这些列不是一个选项).这可能导致每行中没有使用大部分列,这似乎是一个坏主意.

添加第4个表,如John Sikora和其他人提到的,可能是一个选项,但我想首先验证这一点.

修改架构为:

CREATE TABLE t_AllItems(
    [id] [bigint] …
Run Code Online (Sandbox Code Playgroud)

sql-server database-design unique-constraint

22
推荐指数
2
解决办法
3万
查看次数

数据建模草案/报价/订单/发票

我目前正在开展一个小项目,我需要在其中建模以下场景:

脚本

  1. 客户来电,他想要一辆新车的报价.
  2. 销售代表.注册客户信息.
  3. 销售代表.在系统中创建报价,并在报价(汽车)中添加一个项目.
  4. 销售代表.通过电子邮件将报价发送给客户.
  5. 客户接受报价,报价现在不再是报价,而是订单.
  6. 销售代表.检查订单,一切正常,他发票订购.订单现在不再是订单,而是发票.

思考

我需要一些帮助来找出理想的模型,但我有一些想法.

  1. 我认为草稿/报价/发票基本上都是订单.
  2. 草稿/报价单/发票需要单独的唯一编号(id's),所以我正在为所有这些编写单独的表格.

模型

这是我的数据模型v.1.0,请让我知道你的想法.

数据模型v.1.0 关注

然而,我对这个模型有一些关注:

  1. 草稿/报价/发票可能在订单行上有不同的商品和价格.在此模型中,所有草稿/报价/发票都连接到相同的订单和订单行,从而无法使用单独的报价行/草稿行/发票行.也许我会为此制作新表,但基本上相同的信息将存储在多个表中,这也不好.
  2. 有时两个或多个报价成为发票,这个模型将如何处理这个问题?

如果您有关于如何更好地建模的提示,请告诉我们!

编辑:数据模型v.1.4 在此输入图像描述

sql database-design data-modeling invoice

9
推荐指数
2
解决办法
5407
查看次数

用完整性约束来加强“子集”关系的最佳方法是什么

例如,给定3个表:

  • 腹足动物
  • 蜗牛
  • ug

并假设我们要执行

  1. “腹足动物”中的每一行都在“蜗牛”或“子弹”中恰好有一个对应的行(但不能同时包含两者)
  2. “子弹”中的每一行在“腹足动物”中恰好有对应的一行
  3. “蜗牛”中的每一行在“腹足动物”中恰好有对应的一行

设置架构以实施这些约束的最佳方法是什么?

我为postgres提供了一个可能的答案,我对postgres和Oracle的解决方案特别感兴趣,但也有兴趣查看其他RDBMS的解​​决方案

编辑
作为参考,以下答案/评论中的SO问题解决了类似的问题:

mysql sql-server oracle postgresql database-design

5
推荐指数
1
解决办法
2559
查看次数