AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
主页 / dba / 问题

问题[database-design](dba)

Martin Hope
papshmeare
Asked: 2023-03-27 18:18:11 +0800 CST

具有 NOT NULL 外键的规范化表的正确实体关系图表示

  • 5

介绍

大家好,这主要是关于数据库设计中的继承和规范化技术及其在实体关系图中的适当表示的分类/理论问题。在实际实现中,它不会带来挑战,因为您只需将有问题的属性设置为IS NOT NULL即可。然而,对于图形表示,我对如何正确地做它有点困惑。这是一个 github gist 链接,其中包含一个交互式美人鱼图,表示特定示例的假设场景:gist

问题

重要部分在本节中: 假设我们有一个名为 PRODUCT 的实体,它可能具有不同类型的属性,具体取决于所讨论的产品(例如物理产品/数字产品)。出于这个原因,我们引入了两个“子表”,其 PK 引用 PRODUCT 的 FK 属性product_type_id。很明显,一个 PRODUCT 只能有一个单一的 product_type_id,但是因为它可以是PhysicalProduct或DigitalProduct,这两个“子表”与 PRODUCT 有什么样的关系?到目前为止,我推断它必须是图中所示的一对(零或一) 。这就是问题所在(也许不存在)。如果我们有两个一到(零或一)与强制性IS NOT NULL属性的关系是否在视觉上推断出两个一对零关系的可能性,或者它是否没有在我的脑海中点击,这就是在这种情况下应该如何?

database-design
  • 1 个回答
  • 21 Views
Martin Hope
Dan Drake
Asked: 2023-03-05 21:40:07 +0800 CST

如何制作一个表来描述另一个表的行的子集?

  • 7

我想知道制作表示另一个表的行子集的表的惯用方式,或者至少是一种可行的方式。这是通过有效地存储和查找这些子集来实现的。

例如,医疗环境:您有一个 Patients 表和一个 Allergies 表。患者和过敏症之间存在多对多关系——因此关系数据库模式的常用方法是创建一个桥接表,包含两列:患者键和过敏键。

这是一个 ER 图,其中桥梁链接到患者和过敏:

但该解决方案空间效率低下,并且不支持查找具有给定过敏集合的一组患者,因为每个对 A、B 和 C 过敏的患者在桥接表中都有自己的三行。

我想要一个代表过敏子集的表格。因此,例如,我们在桥/子集表中有一种表示“对 A、B 和 C 过敏”:

AllergySubset
SubsetKey | AllergyId
foo       | A
foo       | B
foo       | C
etc etc   | other ids

然后,每个对组合 A、B 和 C 过敏的患者都将链接到“foo”。该模式反转了患者与桥接/子集表之间的链接:

我的问题是:如何查找子集?

给定一个对 B、C 和 E 过敏的患者,如果子集表中已经有一个 AllergySubsetKey,我该如何确定?

或者,等效地:给定过敏 B、C 和 E,如果我知道子集键,我可以找到所有对该组合过敏的患者。我如何找到那把钥匙?

设计此模式的惯用方法是什么?

database-design
  • 1 个回答
  • 74 Views
Martin Hope
user3165854
Asked: 2023-02-25 00:47:03 +0800 CST

在没有时区偏移的情况下以 UTC 格式存储全球日期时间是否可以接受?

  • 6

我正在查看一个从世界各地的系统收集数据的数据仓库。数据仓库使用 UTC 时间,但只存储 UTC 偏移量而不存储时区。我注意到来自例如美国的日期时间数据已被插入,偏移量为 +0000,这表明它已存储为 UTC 而不是本地时间。据我在加载数据的代码中看到的,没有将日期时间从本地时间转换为 UTC 的转换。

我是 DWH 数据建模的新手,但根据我的阅读,我认为我们应该使用转换后的 UTC 偏移量存储数据,存储包含时区的日期时间或存储 UTC 和本地日期时间,因为这可能会产生影响在报告上。目前没有任何报告团队对此提出问题,所以当数据来自世界不同国家/地区时,是否应该担心或将所有内容保存为 UTC 是否可以接受?

谢谢

database-design
  • 1 个回答
  • 23 Views
Martin Hope
Muffin
Asked: 2023-02-22 21:33:31 +0800 CST

什么箭头用于指定连接表和 FK 表之间的关系

  • 5

这是我第一个数据库设计的一部分。我不确定使用什么类型的箭头来描述这种关系:

数据库的图片以及我需要帮助的关系

这些表是停车位、停车位特征和特征。

我不确定如何将停车位特征与停车位和特征相关联。

请记住,许多功能可能与许多停车位相关。这就是我创建联结表的原因。


我想过,我认为一个停车位可以与许多不同的停车位特征相关,但不会多对多,因为每个停车位特征都有唯一的停车位 ID。它是否正确?

database-design
  • 1 个回答
  • 19 Views
Martin Hope
Kane
Asked: 2023-02-08 05:46:47 +0800 CST

当一个列值可以引用不同表时的设计

  • 6

我有一张机器数据表:

machines
----------
id
owner_id
// other data

我们还有来自德国和法国的官方机器数据。两者具有相同的信息:

# Machine data (for german and french machines)
- machine_id: to tie to machines table
- record_number: unique number for each machine, different format for each country
- machine_name: the name of the machine
- market_id: id associated with the machine market, different format for each country

# Market data (also for german and french machines)
- market_id: machine market id, different format for each country
- market_name: name of the market
- specific country information that is different for France and Germany

起初我认为关系模式如下所示:

machines
---------
machine_id
owner_id
// other data

machine_information
---------
machine_id
record_number
country (German or France)
machine_name
market_id

france_markets
---------
id
market_name
// France specific column data

german_markets
---------
id
market_name
// German specific column data

但这会使过滤数据变得非常困难,因为在获取机器信息时,我们不知道我们必须加入哪个市场表。

我还想将 machines_information 分成 2 个,每个国家一个

machines
---------
machine_id
owner_id
// other data

france_machine_information
---------
machine_id
record_number
machine_name
market_id

german_machine_information
---------
machine_id
record_number
machine_name
market_id

france_market
----------
id
market_name
// France specific column data

german_market
----------
id
market_name
// German specific column data

但是这样也有同样的问题,因为在获取机器信息的时候,我们并不知道要加入哪个机器信息表。

这种设计有好的解决方案吗?

谢谢你!

database-design
  • 1 个回答
  • 23 Views
Martin Hope
SQL_NoExpert
Asked: 2023-02-02 18:07:29 +0800 CST

更改 SQL 数据库现有列的数据类型

  • 5

现有 SQL 表中的一个字段是 Decimal (5,5),没有外键关系。开发人员想将其更改为 Decimal (7,5)。

对现有数据进行此类更改的缺点是什么?进行此类更改后,应用程序是否有可能无法运行?

database-design
  • 1 个回答
  • 35 Views
Martin Hope
Normal
Asked: 2023-01-13 03:54:26 +0800 CST

解决关系数据库中的嵌套表问题

  • 5

我来自非 SQL 数据库 (MongoDB),我正在构建一个新项目,但使用的是 MySQL(关系数据库)。

我正在制作一个餐厅系统,在这个系统中,有一个页面,您可以在其中创建产品并描述其成分。

在 MongoDB(非 SQL 数据库)中,您可以为您的文档创建此模式(我将使用 JSON 来描述它只是为了说明要点):

// imagine this is a document of a product stored in the products collection
{
  name: "Burger",
  price: 200,
  ingredients: [
   { name: 'tomato', qty: 2 }, // qty: ie quantity
   { name: 'cheese', qty: 1 },
   { name: 'bread', qty: 2 },
   { name: 'meat', qty: 1 },
  ]
}

但是,在 SQL 关系数据库中,您必须创建类似于以下内容的内容:

在此处输入图像描述

乍一看很难看,但仔细一想,现在也开始习惯了。

首先,我想问一个关于这种方法的问题:

  • 这是解决这个问题的方法吗?

我相信您已经数百次遇到过这种情况。

其次,我还有一个问题:

现在用户按下了“创建”按钮来创建他的产品,他向服务器发送了请求来处理这个请求,

我如何将这些行插入数据库?!

是通过做一个for循环并向数据库发送5个请求:

  1. 第一个请求是在产品成分表中创建ID#1的行。
  2. 第二个请求是在产品成分表中创建ID#2的行。
  3. 第三个请求是在产品成分表中创建ID#3的行。
  4. 第四个请求是在产品成分表中创建ID#4的行。
  5. 第五个也是最后一个请求是在产品表中创建ID#1的行。

这看起来有点疯狂。

这就是我的大脑在说什么。

这就是为什么我特别问这个问题。

后面会有一个更新的产品页面,类似的for循环,一堆请求,要在数据库上执行。

现在的问题是如何。

我感谢所有愿意将我的大脑带入关系数据库世界的人。?

database-design
  • 3 个回答
  • 63 Views
Martin Hope
Sam
Asked: 2023-01-04 13:24:00 +0800 CST

NoSQL 中电子商务的产品对象

  • 5

我正在开发一个将使用 NoSQL 文档数据库的电子商务应用程序。我想要一种通用产品,可用于不同类型的产品,从咖啡到家具再到电子产品。

我认为实现这一点的一种方法是拥有“属性”和“值”,这样根据产品的不同,可以有不同的,我可以将它们用作“选项”供用户在前端选择。

例如,对于一件 T 恤,属性及其值可以是:

{
   "productOptions": [
      { "colors": ["red", "white", "blue"] },
      { "sizes": ["small", "medium", "large", "extra large"] }
   ]
}

我试图在这里解决 4 个问题:

  1. 每个独特的配置都有不同的 SKU 编号,这是相当典型的
  2. 在某些情况下,为特定 SKU 设置不同的价格点也很常见。例如,普通 T 恤的价格可能为 9.99 美元,而特大号 T 恤的价格可能为 12.99 美元。
  3. 另一种可能性是特定配置选项可能不可用。使用Product上面的对象示例,红色可能不适用于特大尺寸
  4. 大多数电子商务系统还允许商家上传 Excel 表格以将其数据导入数据库,因为没有人愿意手动创建甚至 20 种具有多个选项的产品

这意味着,每个产品选项/配置可能必须在数据库中用其自己的 SKU 和价格表示,这意味着单独的条目。就像是:

{
   "id": 123,
   "sku": "987-rs",
   "name": "Quality Brand Tshirt",
   "description": "100% Cotton Small Red",
   "price": 9.99
},
{
   "id": 234,
   "sku": "987-rxl",
   "name": "Quality Brand Tshirt",
   "description": "100% Cotton XL Red",
   "price": 12.99
}

我还认为我可以同时拥有数据库中的属性/值以及所有可用的 SKU,即上面的两个示例一起使用。这将允许在前端轻松处理产品选项,同时仍允许单独的 SKU 和定价。

通用产品设计的另一个挑战是,在某些情况下,在用户创建之前没有实际的产品配置。例如,咖啡或披萨。提前创建每种配料组合并分配 SKU 是没有意义的。这种情况并非食品独有。如果涉及任何定制,相同的场景实际上适用于服装等常规产品。

我敢肯定,许多其他人已经解决了这种情况,并想看看他们是如何处理的。

database-design
  • 1 个回答
  • 48 Views
Martin Hope
thshea
Asked: 2023-01-02 21:44:16 +0800 CST

使用类表继承(或替代方案)时保留外键属性

  • 7

想象一下,我有一个表events,它outdoor_events继承indoor_events自。我有activities然后outdoor_activities和indoor_activities。假设室外和室内是完全不同的结构是有意义的,尽管我对其他建模方式感兴趣,而不是这种继承。

如果我想保留所有活动都链接到一个事件的属性,最直接的方法似乎是在 to 中使用外activities键events。

如果我想将户外活动限制为户外活动,室内活动也是如此,则在每个孩子中放置一个外键更有意义。然而,每个活动都必须与一个事件相关联的事实留给了表的孩子来实现。

我可以两者都做,但是最简单的形式对我来说不是一个可接受的选择,因为它没有标准化并且使用哪个键是不明确的——如果它们不同怎么办?

对我来说,第二种选择更有意义,因为它听起来更强大,并且可以通过适当的实施来满足这两个条件。

我可以做些什么来确保这两个属性都得到满足?还是这种结构在原则上有缺陷?

注意:我不认为这是Using the same table for entities...的重复,因为该问题没有解决配对相似继承表的问题。

database-design
  • 1 个回答
  • 31 Views
Martin Hope
soger
Asked: 2022-12-30 09:56:03 +0800 CST

列中的混合内容是糟糕的设计吗?

  • 5

我有一个同事,他总是把混合内容放在一个专栏中。例如,我正在努力解决的当前案例是一个名为“opts”的列,它是一个整数数组。根据当前行中甚至不存在的类型,您必须加入另一个表才能找到它,此列可能包含:

  • 0 或 1 - 表示开/关状态
  • 表中的 ID 列表
  • 来自第二个表的 ID 列表
  • 在任何其他情况下为 null

对我来说,这看起来更像是混乱而不是有条理的数据。那么这是否违反了数据库设计概念,或者只是我的强迫症?当我试图说服他不要再这样做时,我的论点应该是什么?

我想补充一点,由于不值得深入的原因,表中的 ID 不需要外键,同事也用其他东西来做这个,因为另一个表中的另一列有一个字符串或一个 json 文本. 在这些情况下我会做的是有更多的列,每种情况一个,只完成其中一个,其余的保留为空。

database-design
  • 1 个回答
  • 44 Views

Sidebar

Stats

  • 问题 199037
  • 回答 263511
  • 最佳答案 131755
  • 用户 66345
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve