需要开发数据库逻辑方面的帮助

2024-04-11

这是我的一个小型项目 - 航空公司预订系统 - 让我们称这个航空公司为 FlyMi :我有一个数据库(尚未决定使用哪个数据库,我的朋友想要使用 MongoDB)。

无论如何,这是我的要求: 我有一张表,其中包含航班详细信息 - 航班号、时刻表等。我将使用这张表执行各种操作 - 预订、取消、修改

这就是我陷入困境的地方:对于桌面应用程序和网络应用程序 - 我提供了一个选择座位的选项。这意味着我必须跟踪哪些座位已预订,哪些座位未预订。假设我有一个 UI,它将座位显示为
红色 - 已预订
绿色 - 未预订。

而这一切——针对每一次航班。我的问题是:您认为跟踪该航空公司每个航班的座位预订的最有效方法是什么?

目前的想法:保留一个名为乘客的表 - 包含所有详细信息,例如姓名、地址等,用于跟踪所有乘客,并维护乘客身份证这样,前 4 个字符是航班 ID,最后 2 个字符是他们选择的座位号,中间有随机数(我说随机是因为我认为这里并不重要)。因此,对于任何航班,如果我必须找出未预订座位的数量,我将必须扫描已预订的每位乘客以及已预订该航班的每位乘客。我认为这确实是低效的。为我提供最有效的逻辑来做到这一点。


不要使用“智能钥匙”。

这是一个坏主意,称为“智能钥匙”或“在钥匙中编码信息”。

See 这个答案 https://stackoverflow.com/a/28454136/3404097其中包含这段摘录 https://www.simple-talk.com/sql/learn-sql-server/primary-key-primer-for-sql-server/#sixth:

尽管现在很容易实现智能密钥,但很难建议您创建一个不是自然密钥的自己的智能密钥,因为无论它们有什么优点,它们最终都会遇到麻烦,因为它使数据库变得更加困难进行重构时,会强加一个难以更改的顺序,并且可能不是您的查询的最佳顺序,如果智能键包含非数字字符,则需要进行字符串比较,并且在帮助基于范围的聚合方面不如复合键有效。它还违反了每列都应存储原子值的基本关系准则

智能钥匙也往往会超出其原始编码限制

(请注意,座位位置通常由智能钥匙识别,因为它们是行号和跨行计数。但它们通常也明显物理上永久地固定在该结构中。想象一下,如果它们被贴上标签并重新排列。)

自学数据库设计。

只需用最简单的术语描述您的业务即可。这就是关系模型数据库和 DBMS 的工作原理。

找到足够的填空句子模板来描述您的业务情况:

"customer [cid] has name [firstname] [lastname]
    AND customer [cid] has a phone number [phonenumber] of type [type] ..."
"customer [cid] can use credit card #[card_no]"
"seat [seatid] is at row [row] and column [column]"
"seat [seatid] is booked"
"seat [seatid] is temporarily committed to an unfinished booking"
...

对于每个这样的参数化句子模板(又名谓词)有一个基表,其中空白/参数的名称是列名称。表中的每一行都说明了以下语句 (主张)通过填写其列值的空白而获得;不在表中的每一行都声明 NOT 语句根据其列值填充空白。

然后为每个表找到每个功能依赖(FD) 成立。 (当谓词可以用“... AND”的形式表达时column = F(column1,...)”然后我们说列集 {column1,...} 功能上决定 column column然后FD 组 → 柱保持.) 然后识别每个候选键(CK)。 (Asuperkey是在功能上确定每一列的列集。即那是unique,即这些列的值的每个子行仅出现在表的一行中。 CK 是一个不包含更小的超级密钥的超级密钥。)然后找到每个连接依赖(JD)。 (有些谓词对一定数量的 AND 和“...”表示“... AND ...”。当每个谓词“...”的表看起来像只从其列来自原始表。)请注意,每个 FD 都带有一个关联的(二进制)JD。

Then 正常化您的桌子第五范式(5NF)。这意味着分解(即将包含 JD“... AND ...”的表替换为谓词为“...”的表),直到每个包含 JD 的表都是由 CK 暗示 (ie must当来自 FD 和 CK 的 JD 保持时保持。)(出于性能原因,也可以非规范化通过组合到不在 5NF 中的基表。)

See 这个答案 https://stackoverflow.com/a/28124305/3404097 and this one https://stackoverflow.com/a/24425914/3404097.

然后我们通过描述我们想要的行来查询。我们通过使用逻辑运算符(即 AND、OR、NOT、FOR SOME、FOR ALL 等)连接基表谓词和函数调用来为我们想要的表提供谓词和/或通过关系运算符连接基表名称(即 JOIN、UNION、MINUS/EXCEPT、PROJECT/SELECT、RENAME/AS)来给出我们想要的表的值和/或两者(例如 RESTRICT/WHERE)。

两个表的 JOIN 保存由其谓词的 AND 作为谓词的真实语句的行;以及 UNION OR、MINUS/EXCEPT AND NOT;以及该项目/选择columns表的 put FOR SOME所有其他列在其谓词之前;和 RESTRICT/WHERE 放置 AND状况在其谓词之后;和重命名/AScolumn在其谓词中重命名该参数。因此,表表达式对应于谓词:表(基表或查询结果)值包含根据其(基表或查询表达式)谓词生成 true 语句的行。

See 这个答案 https://stackoverflow.com/a/27682724/3404097.

同样适用于限制条件,这些是真实的语句,它们共同描述了给定可能出现的情况和基表谓词可能出现的应用程序情况和数据库状态。

See 这个答案 https://stackoverflow.com/q/24724425/3404097.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要开发数据库逻辑方面的帮助 的相关文章

  • 在 SSIS 中插入新记录之前如何清空目标表?

    我使用 SSIS 生成和转换新数据 以便以后在新系统中使用 每次运行 SSIS 包时我都会遇到问题 它不断将新记录插入到我的目标表中 如何先清空目标表 OLE DB Destination 然后插入新生成的记录 目前此问题的解决方法是执行d
  • 为 Microsoft SQL Server 创建统计信息时,列顺序重要吗?

    数据库引擎优化顾问建议为我们的几个查询创建一些统计信息 事实证明 其中一些是相同的 只是 CREATE STATISTICS 命令中的列顺序不同 例如 CREATE STATISTICS StatName1 ON dbo table1 co
  • 通过站点到站点 VPN 将 Azure 网站连接到本地数据库

    我的目标是运行一个天蓝色的网站 该网站可以访问我们本地公司数据库中的数据 我按照网络上的教程设置了一个 Azure 虚拟网络 并通过站点到站点 VPN 将其连接到我们本地公司网络 在天蓝色门户中 我可以看到连接实际上正在工作 并且数据已被接
  • MySQL ORDER BY rand(),名称 ASC

    我想获取一个包含 1000 个用户的数据库并随机选择 20 个用户 ORDER BY rand LIMIT 20 然后按名称对结果集进行排序 我想出了以下查询not像我希望的那样工作 SELECT FROM users WHERE 1 OR
  • 甚至阻止超级管理员/dba 删除/更新表?

    我需要确保一些关键任务表永远不会被删除或编辑 唯一可能的操作是从中读取数据 并且 dba 可以添加更多行 就是这样 现在为了增加安全性 我想阻止甚至 dba 都能够删除 更改记录 所以基本上没有人可以删除或更改记录 也没有超级管理员 这些表
  • 博客的 mongodb 架构设计

    您将如何为具有基于文档的数据库 mongodb 的类似博客的网站设计架构 该站点具有以下对象 用户 文章 评论 用户可以向文章添加评论 每个用户还可以为每个评论投票一次 我希望能够有效地执行这些查询 1 获取文章A 文章A的评论以及每个评论
  • 密码恢复:如何解密 md5 加密的密码? [复制]

    这个问题在这里已经有答案了 可能的重复 是否可以解密 md5 哈希值 https stackoverflow com questions 1240852 is it possible to decrypt md5 hashes 在我的网站中
  • 消息传递功能创建 Sql 查询和数据库视图

    鉴于以下情况 我需要能够获取给定用户参与的所有线程的列表 首先按最新消息排序 仅显示最新消息 每个线程 1 条消息 这是上面的 SQL 查询 SELECT Message MessageId Message CreateDate Messa
  • GQL中有OR运算符吗?

    我不知道这里是否有人问过这个问题 我看到了几个关于 like 运算符的问题 但我不确定这是否是我正在寻找的 抱歉我在这方面是菜鸟 但我正在从 MySQL 迁移到 Google App Engine 并且想知道 GQL 中是否有类似于 MyS
  • 每次使用 COUNT() 函数,还是存储该值并将其加一?

    我有一个带有用户 投票 表和 用户 表的数据库 我认为数据库会在短时间内变得相当大 所以我想使用最有效的方法 我想我可以每次使用 投票 表中的 WHERE 语句来 COUNT 投票数 或者我可以将分数存储在 用户 表中 每次投票时将其增加
  • 如何使用 ODBC 检查数据库是否存在

    各位程序员大家好 我已经在互联网上搜索了几天 但找不到仅使用 ODBC 和 SQL 解决此问题的通用方法 有没有办法查看数据库是否已经存在 仅使用ODBC 它必须是标准 SQL 因为用户可以选择自己选择的 DSN 即他自己的 SQL Ser
  • Erlang 更好地支持哪种数据库(SQL)?

    你建议我在 Erlang 中使用什么 MySQL 还是 Postgres 哪个数据库有更好 更成熟 更稳定 更快 的 Erlang 驱动程序 The Erlang ODBC 接口 http erlang org doc apps odbc
  • Python Peeweeexecute_sql() 示例

    我使用 Peewee 模块作为我的项目的 ORM 我看了整个文档 没有明确的 有关如何处理 db execute sql 结果的示例 我跟踪代码 只能发现db execute sql 返回游标 有谁知道如何处理光标 例如迭代它并获取 返回复
  • MySQL:错误 1215 (HY000):无法添加外键约束

    我读过了数据库系统概念 第六版 西尔伯沙茨 我将在 OS X 上的 MySQL 上实现第 2 章中所示的大学数据库系统 但我在创建表格时遇到了麻烦course 桌子department好像 mysql gt select from depa
  • MySQL 错误:无法创建表(errno:121“写入或更新时重复键”)

    我使用 MySQL Workbench 生成数据库的图表和代码 当我将代码放入 phpMyAdmin 时 它显示错误 1005 无法创建表wypozyczalnia wypozyczenie 错误号 121 写入或更新时密钥重复 哪里有问题
  • ruby-on-rails 检查查询结果是否为空(Model.find)

    我正在 Rails 上使用 ruby 并尝试检查查询是否返回值 这是查询 search Customer find by name login name 如果查询找到结果 一切都很好 但是我如何对空结果做出反应 I tried if sea
  • 有用的库存 SQL 数据集吗?

    有谁知道有哪些资源可以提供优质 有用的股票数据集 例如 我下载了一个包含美国所有州 城市和邮政编码的 SQL 脚本 这在最近的一个应用程序中节省了我很多时间 我希望能够按地理位置进行查找 你们中有人知道其他可以免费下载的有用数据集吗 例如
  • 在iOS中启动应用程序时如何复制sqlite数据库?

    每次启动应用程序时 我想将带有最新更新的 sqlite 数据库从数据库位置复制到我的 iOS 应用程序 有什么办法可以做到吗 您可以将以下方法添加到您的应用程序委托中 void copyDatabaseIfNeeded Using NSFi
  • Django ORM 是否具有与 SQLAlchemy 的混合属性等效的功能?

    In SQL炼金术 http docs sqlalchemy org en rel 0 7 index html a 混合属性 http docs sqlalchemy org en rel 0 7 orm extensions hybri
  • mysql 查询从给定的表结构创建 SEO 友好的 url

    我正在尝试使用下表创建 SEO 友好的 URL 类别表 http sqlfiddle com 2 c474a 4 页表 http sqlfiddle com 2 c474a 5 我正在尝试编写一个 mysql 查询 该查询将使用产生以下输出

随机推荐

  • android中C++与Java的通信

    我想在 Android 的本机代码中从 C 文件调用 java 方法 我知道 我们可以从 JNI 实现这一点 但在这种情况下 我需要从 Java 发起调用 这不符合我的要求 我需要从 C 中的 main 函数调用用 Java 编写的方法 那
  • Android:Kotlin:自定义 webView - 无法作为函数调用。找不到函数“invoke()”

    我有一项活动 联系活动 kt 仅包含一个 webView 组件 使用 Kotlin 编写活动 我想用我的自定义 webView 替换 webView ObservableWebView java 所以这里的代码 我的活动 kt class
  • 在裸机上使用 Kubernetes 1.6 安装插件的说明?

    我按照此文档从头开始设置了我的 kubernetes 集群 https kubernetes io docs getting started guides scratch https kubernetes io docs getting s
  • 在 Foundation 中动态设置 Sass 变量

    如何在 Foundation 中动态设置 Sass 变量 根据他们的文档 http foundation zurb com docs components tables html 您可以借助一些 Sass 变量来自定义表格 settings
  • PHP MySQL 数据库奇怪字符

    我正在尝试输出存储在 MySQL 数据库中的产品信息 但它写出了一些奇怪的字符 例如内部带有问号的菱形 我认为这可能是编码 UTF8问题 但我已经指定了我想要的编码 这是正确的吗 我应该检查什么 如果只有来自数据库的数据包含奇怪的字符 请使
  • 如何使 TinyMCE 在 UpdatePanel 中工作?

    我正在尝试做许多人似乎能够做到的事情 但我无法实施任何解决方案 这TinyMCE http tinymce moxiecode com 控件在 asp net 表单中工作得很好 直到您用 UpdatePanel 将其括起来 然后在回发后中断
  • 在 SceneKit 游戏中为 SCNNode 制作 SCNConstraint (LookAt) 动画以使过渡逐渐进行

    一般来说 当你想让游戏中的角色面对镜头时 可以使用 SCNLookAtConstraint 这实际上也对我很有帮助 Below 我的对象是我试图根据约束定向的节点 Enemy 指的是场景中的某个节点 pointOfView 是场景的视角 当
  • eclipse 找不到 android.support.v4.widget.SwipeRefreshLayout

    即使点击添加支持库并选择版本19后 eclipse仍然找不到android support v4 widget SwipeRefreshLayout 有谁知道如何让它发挥作用 我在用
  • 无法在 AWS Opsworks 上使用 Chef 12 找到 Chef 社区食谱

    问题 在 AWS OpsWorks 上运行自定义说明书时setup failed状态针对实例显示 并且故障日志中显示以下内容 2016 03 26T22 53 48 00 00 INFO Started chef zero at chefz
  • numpy 中的索引(与 max/argmax 相关)

    假设我有一个 N 维 numpy 数组x和一个 N 1 维索引数组m 例如 m x argmax axis 1 我想构造 N 1 维数组y这样y i 1 i N 1 x i 1 i N 1 m i 1 i N 1 为了argmax上面的例子
  • 具有高质量代码的开源 Objective-C 项目?

    我认为学习新编程语言的最佳方法之一是深入研究源代码并了解经验丰富的程序员如何编写 我在 Stack Overflow 上发现了针对其他语言的此类问题 但没有针对 Objective C 的问题 我发现的最接近的是这个关于好看的 Cocoa
  • 如何在Delphi中调试由另一个.exe启动的.exe

    我想调试App2 exe 它是由App1 exe启动的 如果 App2 exe 是一个 dll 我可以指定一个主机应用程序 但这似乎不适用于 exe 我现在使用 附加到进程 但如果 App2 exe 在我执行此操作之前崩溃 则这是无用的 有
  • 为什么无符号变量没有被更频繁地使用? [复制]

    这个问题在这里已经有答案了 似乎无符号整数对于方法参数和永远不应该为负数的类成员很有用 但我没有看到很多人以这种方式编写代码 我自己尝试了一下 发现需要从 int 转换为 uint 有点烦人 无论如何 你对此有何想法 复制 为什么数组长度是
  • 如何在 C# 中执行 cmd,然后在同一窗口中执行后面的另一个命令?

    我想要完成的是一个基本上一键设置活动分区的程序 节省了使用 cmd 提示符等的时间和技巧 我已经研究了 System Management 名称空间 但无法弄清楚如何使用它 所以我求助于使用 CMD 我有一个用 C 编写的模块应用程序 基本
  • WebSocket 连接建立时出错:net::ERR_CONNECTION_CLOSED

    当我尝试建立一个wss与我的服务器的连接 与 wss mydomain 3000 的 WebSocket 连接失败 错误 连接建立 net ERR CONNECTION CLOSED 我目前有一个 apache2 虚拟主机配置设置来侦听端口
  • Hyperledger Composer:尚未为此连接指定业务网络

    我已经在本地安装了 hyperledger 作曲家 但在本地主机上它给出错误 错误 尝试 ping 时出错 错误 没有业务网络 为此连接指定 我也无法添加模型和脚本文件 这是终端中显示的错误 error Hyperledger Compos
  • 开放数据库你好世界

    我正在尝试了解 openDatabase 并且我想我正在将其插入到 TABLE1 但我无法验证 SELECT FROM TABLE1 是否正常工作
  • 在清单中指定 Android Market RAM

    有些人继续在具有 100MB RAM 的手机上下载并安装我们的高清游戏 并给我们一个差评 有没有办法将应用程序下载限制为仅具有大量内存的智能手机 或者限制为新型号 CPU 我的最终解决方案来自 Raghav Sood 的提示 经过一番研究后
  • 使用 C# WebClient 伪造表单提交

    我需要调用 Web 并从我的 asp net mvc 应用程序中的模型检索结果数据 在网络上访问时 表单如下所示
  • 需要开发数据库逻辑方面的帮助

    这是我的一个小型项目 航空公司预订系统 让我们称这个航空公司为 FlyMi 我有一个数据库 尚未决定使用哪个数据库 我的朋友想要使用 MongoDB 无论如何 这是我的要求 我有一张表 其中包含航班详细信息 航班号 时刻表等 我将使用这张表