AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

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

Mobile menu

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

问题[database-design](dba)

Martin Hope
Cidos
Asked: 2023-11-09 23:49:49 +0800 CST

正确(如标准化)方式来表达具有复杂(?)约束的 3 个表之间的关系?

  • 6

这是我向这个网站提出的第一个问题,如果这是重复的,我很抱歉,我只是没有受过足够的教育,不知道用于搜索这个概念的正确术语,如果这样的概念是一个已知的模式,我会如果答案有一个名字,我将不胜感激。

现在,回答问题。我将使用 postgres 作为示例,但如果需要,请随意显示其他数据库中的示例。

简化的架构:

create table factory (
  id serial primary key,
  detail text not null
);

create table process (
  id serial primary key,
  detail text not null
);

create table item (
  id serial primary key,
  detail text not null
);

为了简洁起见,我将工厂称为 [F],流程称为 [P],项目称为 [I]。

该模式具有以下概念关系:

  • 每个进程专属于一个工厂,因此 [P] n -> 1 [F]
  • 每个项目都专属于一个工厂,因此 [I] n -> 1 [F]
  • 每个项目可以由多个进程制作,因此 [P] n -> 1 [I]

为了表达这种关系,我想出了一个“factory_item_process”表:

create table factory_item_process (
  factory_id integer not null references factory(id),
  process_id integer not null references process(id),
  item_id integer not null references item(id),
  constraint pk_factory_item_process primary key (
    factory_id, process_id, item_id
  ),
  constraint uq_factory_item_process_process unique (process_id)
);

这解决了[P] n -> 1 [I]和[P] n -> 1 [F],但没有解决 [I] n -> 1 [F]。

我得出的结论是,没有办法用[I] n -> 1 [F]唯一的键约束来传达,因此我创建了一个简单的函数来检查 [I] 是否已经属于 [F]:

create function in_other_factories(
  factory_id integer, 
  item_id integer
) returns boolean
language sql returns null on null input
  return true in (
    select 
      true 
    from factory_item_process
    where factory_id <> $1
      and item_id = $2
  );
alter table factory_item_process 
  add constraint chk_factory_item check(not in_other_factories(factory_id, item_id));

请记住,我是一个新手,我想问:factory_item_process表达这种关系的正确方式是什么?我感觉自己做错了什么,但又不太能理解。

使用用户定义的函数进行检查看起来像是代码味道,但我想不出其他任何东西。我也不确定表格是否正确标准化。

提前致谢

编辑以回应 Mustaccio 答案:我选择为该关系使用另一个表,因为该关系将具有其自身独有的属性。

database-design
  • 2 个回答
  • 37 Views
Martin Hope
zor
Asked: 2023-11-07 19:40:13 +0800 CST

为用户存储不同结构的文档时,最好的数据库设计是什么?

  • 5

要求是:用户应该能够定义他们想要存储的文档的结构。

例如,用户可以决定存储具有以下结构的银行对账单:

  • 发布日期(日期)
  • 详情(文字)
  • 借方(数字)
  • 信用(数)
  • 值_日期(日期)
  • 参考文献(文字)

然后选择一个文件加载到数据库中。

另一个用户或同一用户还可以加载具有不同结构的不同文档。

如果我们知道可用文档的所有不同结构,我们可以在数据库中创建所有表,但系统必须使用户可以加载任何类型的文档,并定义其自己的结构。

如果可能的话,我正在寻找一种将文档中的所有行保存到单个表中的方法。或者,当用户定义要加载的新文档结构时,我应该动态创建一个新表吗?这是最好的方法吗?

database-design
  • 2 个回答
  • 53 Views
Martin Hope
Cydennn
Asked: 2023-11-05 20:27:21 +0800 CST

频繁增长的日志文件应该存储为数据库中的表还是 blob?

  • 6

我是一名本科生,还没有使用过任何实际的数据库,所以如果我误解/误用任何术语,我深表歉意。我的问题来自我的一项作业,但这是我学习的尝试,而不是让我做作业。

任务,解释一下:

某大学的打印服务允许校园内的学生将文件上传到系统,并将上传的文件发送到大学的一台打印机进行打印...系统记录所有学生完成的所有打印,记录学生的 ID、使用哪台打印机、打印文件的名称以及打印时间。系统管理员应该能够查看过滤到任何学生、打印机和/或时间段的日志文件(据我所知,这需要索引)。

我遇到的一个问题是我应该使用哪种数据存储方法(数据库或文件系统)来存储学生的文件和日志文件,这两者都是频繁增长的数据。

从这个SO问题我了解到,频繁更新的文件最好存储为文件系统存储,并且从这个问题可以将文件存储在带有blob的数据库中。

我的问题是:

  1. 日志文件应该存储在数据库还是文件系统中?(或者我认为决定性的问题是“是否可以在不建立索引的情况下按多个值进行过滤?”)
  2. 如果学生文件与数据库表中与学生相关的 blob 一起存储,是否每个学生只能访问自己的文件?
  3. 为什么文件系统更适合频繁增长的文件?
  4. 服务器是否可能(或实用)同时使用数据库和文件系统?
database-design
  • 2 个回答
  • 54 Views
Martin Hope
lorem1213
Asked: 2023-10-11 03:51:51 +0800 CST

如何将问题映射到考试系统中的章节?

  • 4

我将创建一个基于多项选择的考试系统。我是数据库设计的新手,希望您帮助回答一些问题。如何建模问题和问题类别?

背景:有多个科目(例如:物理、化学、数学等)。每个主题都有部分,每个部分都有章节。例如:化学有物理化学、有机化学和无机化学等部分。每个部分都有相关的章节。

还有一些问题,每个问题都属于其中一章。通过上述上下文,很明显,每一章都属于一个独特主题的一个独特部分。现在我应该如何继续为此设计数据库?

选项1:

questions:
question_text varchar,
...
chapter_id int foreign_key

chapters:
chapter_name varchar,
section_id int foreign_key

section:
section_name varchar,
subject_id int foreign_key

subject:
id int primary_key,
subject_name varchar,

但我认为当我想按主题和部分查找问题时,这会导致复杂的查询。首先,我需要找到所有部分,然后找到所有章节,然后找到属于给定问题的问题。

选项_2:

questions:
question_text varchar
subject_id int foreign_key,
section_id int foreign_key,
chapter_id int foreign_key,

subjects:
subject_id int primary_key,
subject_name varchar

sections:
section_id int primary_key,
section_name varchar

chapters:
chapter_id int primary_key,
chapter_name varchar

在这种情况下,主题、章节和章节之间将不存在任何关系。

我很想听听一些见解。

database-design
  • 1 个回答
  • 11 Views
Martin Hope
Tiny
Asked: 2023-08-31 17:04:23 +0800 CST

数据库设计——规范化查询

  • 5

我是一名老师,正在询问我们考试委员会给出的解决方案。问题如下所示,我想寻求帮助来理解为什么我的解决方案不可接受。

这是原始问题/场景:


在此输入图像描述

在此输入图像描述


这是我的解决方案:


在此输入图像描述


我们的审查委员会给出的解决方案如下所示。正如您将看到的,它们表明需要“AssignedSeat”实体。我了解他们在这里解决多对多关系,但我问我的解决方案(蓝色)仅使用这两个实体是否同样有效?


标准分数计划 在此输入图像描述

database-design
  • 1 个回答
  • 40 Views
Martin Hope
Merinorus
Asked: 2023-08-04 00:23:55 +0800 CST

对多个关联表进行约束检查与集中这些约束检查的唯一关联表

  • 7

我有以下数据库架构(MySQL 5.7):

当前数据库架构1

我的助手可能与以下任意一个相关:

  • 一个客户(将来可能会发展为多个客户,因此需要关联表)
  • 一个或多个终端

我想实现这个约束:助理不能同时链接到客户和终端。如何在没有复杂机械的情况下实现这个约束?

我没有考虑自定义函数和触发器,而是考虑以下架构:

新的数据库架构

数据库模型对我来说看起来很奇怪,但关联表现在是唯一的,我可以更轻松地实现约束检查,因为它们与唯一的表相关。

其他可能性:

替代数据库模式

现在我的助手在数据库中完全分为两种类型,具有相同的列。

该怎么走呢?

database-design
  • 1 个回答
  • 25 Views
Martin Hope
Logos Masters
Asked: 2023-07-23 02:39:59 +0800 CST

同时创建子类型和超类型的最直接方法是什么?

  • 5

我希望这不是一个太基本的问题,但我希望这里的数据库工程师能帮助我。关系数据库通常有一种简单的方法来执行以下操作吗?:

  1. 创建一个以UUID为主键的超级表
  2. 创建多个子表,其中每个子表都将超表中的主键作为外键。
  3. 当我向子表添加一行时,会在超表中创建相应的行。可能是先自动创建超表行,然后再在子表中创建新行并将其作为外键。

就我而言,我正在设计将存储多种类型的帖子(文本、视频、图像)的数据库。每种(子)类型的帖子都有独特的属性,因此应该有自己的表格。但是,我希望所有帖子都按 GUID 组织在超级表中,其中包含所有帖子子类型共享的属性。我已经能够设置这些表,但我不喜欢这样的事实:我无法将给定子类型的帖子输入子表并自动填充超表。

有人建议我只使用一个命令创建超级表和子表条目,如下所示:

with new_post as (
  insert into posts (name) values ('My new video post')
  returning id
)
insert into videos (guid)
select id 
from new_post;

然而这似乎很尴尬。我知道有很多方法可以在其他表中设置关系和回填列,但我似乎找不到这种特定类型的回填关系的示例。

我碰巧通过 SQLAlchemy 使用 Postgres,但欢迎提供有关如何在任何数据库中解决此问题的一般性答案。

database-design
  • 1 个回答
  • 31 Views
Martin Hope
cdrrrrr
Asked: 2023-06-21 01:44:13 +0800 CST

MSSQL - 市场数据库设计

  • 5

哎呀伙计们!因此,我正在尝试为客户可以购买、供应商可以销售的市场设计一个数据库。很简单。

客户永远不可能成为供应商,反之亦然。我面临的挑战如下:我试图通过关系模式对数据库中的实体进行隔离/分离/分组,如下所示:

  1. Geographic将参考country,district和city;
  2. Commonproducts将指代可在主要实体之间作为资源共享的任何内容,即 、customers和vendors;
  3. 我不知道如何解决如何分离customer,vendor和product实体。

我在想:

  1. 为了customer将有关他们的所有内容都包含在一个名为“ [Customer].[TableName]where”的模式中tableName,可以是:个人资料、设置、地址等。
  2. 至于vendor除了customer他们可以添加、发布和销售物品之外,共享与但customer下相同的信息[Vendor].[TableName];

挑战在于:products只有供应商可以添加,而客户只能购买。每个产品都属于一个类别和一个子类别。此外,每种产品可以按原样出售,也可以有变体(即:尺寸),并且每个变体将有不同的选项(即:小/中等),因此,变体+选项的每种组合的价格不同。

最初,我想将其放在[Vendor]模式下,但对我来说,它看起来更像是属于模式[Product]。另外,添加这么多像[Vendor].[ProductVariant]+[Vendor].[ProductVariantOption]之类的表,似乎有点让人不知所措。

所以我想问一下?如果你是我,你会如何设计这个数据库?任何提示都将受到高度赞赏。

database-design
  • 1 个回答
  • 30 Views
Martin Hope
Heraxia
Asked: 2023-06-20 17:30:49 +0800 CST

在 SQL 数据库中对喜欢、不喜欢和评论进行建模

  • 5

我现在正在创建一个类似于 Reddit 的网站。在这里,用户可以撰写帖子,而其他用户(包括作者)可以对帖子进行评论和/或赞成/反对(1 或 -1) 。

为了存储必要的数据,我设计了以下SQL模型,但是由于这是我第一次设计SQL模型,我不确定我做得好不好,所以我想问一下我的模型好不好。

顺便说一下,我尝试将其规范化为第三范式。

USERS = (email, familyName, givenName, Password);
POSTS = (Id_posts, #email, postText, postDate);
TO_COMMENT = (#email, #Id_posts, commentText, commentDate);
TO_VOTE = (#email, #Id_posts, vote);

我预先感谢所有愿意花时间为我提供建议的人。

PS:对于投票的总分,我考虑使用 sum (),这就是为什么它不分为两部分(赞成票和反对票)。

database-design
  • 2 个回答
  • 35 Views
Martin Hope
RamPrakash
Asked: 2023-05-12 07:08:18 +0800 CST

简单事件驱动架构的表格设计——订单工作流

  • 5

我正在为通过消息队列进行通信的异步应用程序寻找数据库/表设计的想法。

有一个送餐应用程序。为了让我说订单已完成,以下服务应该接受它。(这是异步的..)

  1. 餐厅服务
  2. 司机服务

如果其中之一拒绝,订单将立即取消。

我有一个 order_details 表(只是为了简单起见)。

order_details
 order_id
 status 

我应该将此 order_details 中的餐厅和司机接受状态保留为单独的列,还是应该将它们存储在单独的表中?

我担心的是 - 如果我们将来需要在工作流程中添加另一个组件怎么办。例如:支付服务。

database-design
  • 1 个回答
  • 23 Views

Sidebar

Stats

  • 问题 201580
  • 回答 266268
  • 最佳答案 133134
  • 用户 67193
  • 热门
  • 回答
  • 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