图书馆的数据库架构

2024-01-04

我正在为我的大学的一个部门设计一个图书馆管理系统,我想吸引您关注我提出的架构。这篇文章主要涉及我们如何存储每本书的多个副本;我设计的一些东西让我感到不舒服,我希望你们都能指出更好的方法来解决问题。

为了处理用户借书的情况,我设计了三个表:book, customer, and 书本副本。这些表之间的关系如下:

  • Every book有很多书籍副本(为了避免在存储我们拥有该书的多个副本的事实时重复该书的信息)。
  • Every user有很多书籍副本(关系的另一端)

表本身的设计如下:

------------------------------------------------
book
------------------------------------------------
+ id
+ title
+ author
+ isbn
+ etc.
------------------------------------------------

------------------------------------------------
customer
------------------------------------------------
+ id
+ first_name
+ first_name
+ email
+ address
+ city
+ state
+ zip
+ etc.
------------------------------------------------

------------------------------------------------
book_copy
------------------------------------------------
+ id
+ book_id (FK to book)
+ customer_id (FK to customer)
+ checked_out
+ due_date
+ etc.
------------------------------------------------

这似乎是不正确的(或者至少对我来说效率低下)——我内心的完美主义者感觉我没有正确规范化这些数据。你们说什么?有没有更好、更有效的方法来设计这个模式?

Thanks!


这是一个不错的模式。然而,它并没有模拟以下可能性:work可以有几个不同的演示文稿——也就是说,一本书可以有多个版本(以及翻译和格式)。

与数据建模中一样,您如何对其进行切片(您使用的粒度)取决于您的使用情况。换句话说,对于您来说,对于您的用法来说,德语翻译是“真实的”吗?爱丽丝漫游仙境与英文原文“不同”吗? (应该是)。平装本与精装本“不同”吗?

对此的简单答案是仅使用 ISBN 作为密钥 - 让出版业为您做出这些决定。那么,任何具有相同 ISBN 的东西都是平等且可替代的。

您可能还想建模诸如“可接受的替代品”、“这个 ISBN 是那个 ISBN 的可接受替代品,因为唯一的区别是绑定”或“这个 ISBN(达尔文的Origins第六版)是该版本的第六版(达尔文的原版)物种起源)”,或者“这个 ISBN 是那个 ISBN 的翻译”,甚至“这个 ISBN(KJV 圣经)是similar到那个(NIV 圣经)。”这进入了微妙的层次。

另一个更根本的问题是,同一本书的副本与这些副本的借阅混为一谈。如果您不幸订购了 10 份,例如 Herb Schildt 的带注释的 ANSI C 标准,但幸运的是,它们没有被签出,因为你们大学的学生读了 Pete Seebach 对那本可怕的书的精彩评论,book_copy 中那些副本的 customer_id 是什么?

你(至少)想要书籍(工作,isbn)的表格;复制;用户;以及关系 user-checksout-copy。

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

图书馆的数据库架构 的相关文章

  • 用户反馈系统的正确数据库模型(一个有趣的案例)

    我正在使用 PHP 和 Yii Framework 开发一个应用程序 我一直在考虑最适合给定功能的数据库结构 这就是我的想法 但我并不是 100 肯定应该这样做 因此我决定询问社区 应用程序说明 注册用户可以参加活动 每个事件都可以有一个
  • 如何定义基于标签的组织结构?

    原标题 有没有办法在基于标签的组织方法上强制建立关系结构 我有一些实体 它们有一系列属性 一些属性影响实体可以具有的其他属性 许多属性被组织成组 并且有时实体被要求具有来自某些组的一定数量的属性 或者可能具有来自某些组的一定范围的属性 有没
  • 用户评级的 ER 模型

    我有很多 用户 每个用户最多有 5 个 服务 用户应该能够对每项服务进行评分 0 5 我还想保留用户的平均评分 这是我的想法 但是还有更好的方法吗 User id user name dob 服务 固定数量的服务 id service de
  • 字符集和排序规则到底是什么意思?

    我可以阅读MySQL文档而且非常清楚 但是 如何决定使用哪种字符集呢 校对对什么数据有影响 我要求解释这两者以及如何选择它们 来自 MySQLdocs http dev mysql com doc refman 5 0 en charset
  • 维护数据库表行的排序顺序

    假设我有一个数据库表 其中每行包含有关新闻文章的信息 该表有一个整数 排序 列 用于指示文章在网站上呈现的顺序 我如何最好地实施和维护这种排序顺序 我想避免的问题是文章编号为 1 2 3 4 100 当文章编号 50 突然变得有趣时 它的排
  • 在 SQL Server 2005 IMAGE 列中存储 20 Meg 文件的最有效方法

    我们将文档存储在 SQL Server 2005 数据库表中 列格式为 Image 每次我尝试存储大于 1 Meg 的 PDF 文件时 它都会以某种方式损坏 NET 中是否有任何特别有效的方法来序列化大文件 10megs 并将其存储到数据库
  • 是否值得为 SqlServer 查找表使用tinyint 而不是 int 呢?

    在 SqlServer 2005 中设计查找表 枚举 时 如果您知道条目数永远不会变得很高 是否应该使用tinyint 而不是 int 我最关心的是性能 尤其是索引的效率 假设您有这些代表性表格 Person PersonId int PK
  • 如何设计具有主键和多值属性的表?

    我对数据库设计很感兴趣 现在正在阅读相应的文献 通过这本书 我遇到了一个让我感到不确定的奇怪例子 有一个关系 在此表中 我们有一个复合主键 StudentID Activity 但ActivityFee部分依赖于表的key Activity
  • 实时数据和草稿数据的数据库模型

    我一直在考虑在数据库中保存 实时 数据集和草稿数据集的最佳方法 实际版本会显示在网站上 草稿版本会一直进行下去 直到准备好上线为止 该模型是关系模型 由许多表组成 我目前的方法是拥有 2 个数据库 一个用于草稿 一个用于实时 当您将数据提升
  • 静态时序数据的数据库解决方案

    我们拥有一个庞大且不断增长的实验数据集 该数据集取自约 30 000 名受试者 对于每个主题 都有多个数据记录 在每个记录中 收集了多个生理数据时间序列 每个时间序列约 90 秒长 并以 250Hz 采样 我应该注意到 时间序列的任何给定实
  • 是否需要连续编号?

    我正在开发一个 winform NET 应用程序 其中包括订单 发票 服务订单 票务等 这些实体在对其 ID 进行编号时是否必须按顺序排列 国际海事组织没有 以一个订单为例 它只有通过业务层才有效 在此过程中 可能已经创建了另一个订单 批准
  • 多人/单人测验游戏的数据库设计

    我在这里看到了很多问题 但没有人适合我的问题 我正在尝试创建一个可扩展的 ER 模型 如果我想添加更多数据 则不会破坏几乎任何东西 所以我尝试创建的是 有两种类型的用户 比如说管理员和工作人员 他们有不同的角色 管理员可以对问题进行 CRU
  • 数据库设计 - “推”模型,或写时扇出

    背景信息 我正在尝试检索我关注的人的图像 按最新时间排序 它就像 Twitter 新闻源 显示您朋友的最新动态 Plans 目前我只需要考虑一项 那就是图像 将来我计划分析用户的行为并将他们可能喜欢的其他图像添加到他们的提要中等 http
  • 本地 SQLite 与远程 MongoDB

    我正在设计一个新的 Web 项目 在研究了一些旨在可扩展性的选项后 我提出了两个数据库解决方案 为可扩展方式精心设计的本地 SQLite 文件 每个 X 用户一个新的数据库文件 因为写入将取决于用户内容 不存在跨用户数据依赖性 远程 Mon
  • 当您有两种类型的记录时,该表的最佳数据库设计是什么

    我正在跟踪练习 我有一个workout表与 id 练习ID 外键进入练习表 现在 一些练习 例如重量训练 将包含以下字段 重量 次数 我刚刚举起 10 次 100 磅 跑步等其他练习将包含以下字段 时间 距离 我刚刚跑了5英里 花了1个小时
  • Rails 中多表单复选框的数据库结构

    我正在开发一个 Rails 应用程序 允许用户创建时间表 这样做时 他们应该能够选择事件发生在一周中的哪几天 我计划在表单中执行此操作的方式是每个工作日旁边有一个复选框 如下所示 etc 然而 我发现这可能不是处理这个问题的非常有效的方法
  • “多对二”关系

    我想知道 多对二 关系 孩子可以与两个父母中的任何一个有联系 但不能与两个父母都有联系 有什么办法可以加强这一点吗 另外我想防止孩子重复输入 现实世界的例子是电话号码 用户和公司 一个公司可以有很多电话号码 一个用户可以有很多电话号码 但理
  • 一个大连接或多个查询哪个提供更好的性能?

    我有一个名为订单的表 订单上的一列是 customer id我有一个名为 customers 的表 有 10 个字段 给定两个选项 如果我想构建订单对象数组并嵌入订单对象中的是客户对象 我有两个选择 选项1 A 首先查询订单表 b 循环遍历
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • 跨多个表进行搜索,并在结果行中显示表名称

    如何构建 SQL 语句以跨多个平面不相关的表运行 并使用选择结果和结果来自的表的名称显示结果 这种情况是这样的 我有几个表 每个表都有相同的列名 这是我从外部各方收到的数据 并将其存储在不同的表中 相同的表看起来像 Table 1 pid

随机推荐

  • 有向图和无向图有什么区别

    这些基本类型之间有什么区别 在附图中我看到有向有箭头 但是有向图中的这些箭头以及无向图中没有箭头到底意味着什么 它的意思正是它听起来的样子 在有向图中 方向很重要 即边 2 gt 3 表示边是有向的 只有从 2 到 3 的边 没有从 3 到
  • 在matlab中将GML文件转换为邻接矩阵

    我有一个GML http en wikipedia org wiki Graph Modelling Language有向图文件 政治博客 http www personal umich edu mejn netdata polblogs
  • 结合 grid.arrange 删除两个 ggplot 之间的所有空间

    我想粘贴两个图 主题之间没有任何空间 因此它们共享一个轴 Given p1 lt qplot 1 1 xlab p1 lt p1 theme legend position none axis text x element blank ax
  • struts 2 在调用堆栈中找不到名称为[excelStream]的java.io.InputStream

    excelStream我正在尝试下载 Excel 文件 在我的动作课上 public class ActivityTrackerExlReportAction extends BaseAction private InputStream e
  • 如何在 fop 生成的 pdf 中显示预先格式化的文本?

    有谁知道如何显示预格式化的 html 文本 例如 ol li item 1 li li item 2 li li item 3 li ol 在用 fop 生成的 pdf 中 Thanks 这个 XSLT 1 0
  • MFC:CFormView 派生类的 OnInitialUpdate 函数

    我的 CFormView 派生类的结构如下 class FormViewClass public CFormView FormViewClass void Initialize virtual void OnInitialUpdate 理想
  • 了解开关条件下的寄存器用法

    我有一个 C 语言的开关条件代码和汇编代码 但对我来说设置什么似乎非常随意 edx或eax或ecx 如何区分 edx epx ecx ebp 之间的区别 就连教科书也没有给我足够的解释 include
  • 作为启动 RDP 程序运行时如何停止初始表单最大化?

    当主机和客户端都是 XP Pro 计算机时 在终端服务 远程桌面 会话中启动时 我的 VB6 应用程序中的启动表单表现得很奇怪 该表单本来是要居中的 但实际上它最大化了 并且其内容位于左上角 看起来很奇怪 请注意 只有当应用程序路径用于 R
  • 在 VTable 上下文中,虚拟方法调用和直接方法调用有什么区别?

    在 VTable 上下文中 虚拟方法调用和直接方法调用有什么区别 在虚拟和直接调用的情况下如何解决方法引用 理论上 不存在这样的东西 C 标准没有定义它 定义了虚拟调用 但没有指定它们必须如何工作 不存在像VTable这样的东西 在实践中
  • 计算 R 中矩阵的成对差异数

    我有以下矩阵 0 1 0 0 0 1 0 0 Row A 0 1 0 0 0 0 1 0 Row B 0 1 0 0 0 0 0 0 Row C 0 0 1 0 0 0 0 0 Row D 我想制作一个新的矩阵 显示每行之间的成对差异 例如
  • GHC生成的.hi、.p_hi和.dyn_hi文件有什么区别

    我正在尝试减少包含 Nix 派生的存档的大小 我注意到每个模块都有 3 个文件 hi p hi 和 dyn hi 大小都相似 ghc 提示 解释器只需要 hi 如果我删除其余变量 则什么也不会发生 那么 p hi 和 dyn hi 是沙袋吗
  • 在 Django 中使用 formset_factory

    我是 Django 的新用户 我使用以下代码生成表单 class GetMachine forms Form Machine Name forms CharField max length 20 Number of lines forms
  • 如何限制Python 3中多线程程序中的API调用?

    经过大量研究 我不确定最佳实践是什么 我的以下想法是否合适 我想要访问一个 API 该 API 将我可以进行的调用总数限制为每分钟 50 次 我的程序有多个独立运行的线程 如何限制我的程序保持在阈值以下 我的想法是创建一个队列 并每 X 秒
  • 优化与未优化构建的 KCachegrind 输出

    I run valgrind tool callgrind executable在由以下代码生成的可执行文件上 include
  • 未知的底部 blob“数据”(层“conv1”,底部索引 0)

    尝试在我自己的数据集上训练 LeNet 我从长一维矢量数据集生成了 HD F5 文件 并创建了 HDF5 数据层 如下所示 我对顶部 blob 的命名与生成 HDF5 时的命名相同 name Test net layer name data
  • 导出大型 MySql 表

    我在 MySql 中有一个表 我使用 PhpMyAdmin 进行管理 目前约有 960 000 行 我有一个老板喜欢看Excel中的数据 这意味着每周我都要将数据导出到Excel中 我正在寻找一种更有效的方法来做到这一点 因为我实际上无法一
  • Pattern.matches() 针对 char 数组,无需在 java 中转换为 String

    Scenario 我需要根据字符数组检查正则表达式模式 char 出于安全考虑 我不允许将字符数组转换为字符串 Java 的 Pattern matches 方法旨在获取模式和字符串 另外 正则表达式模式是从另一个来源传递给我的 并且会发生
  • AWS ELB 中的双栈前缀是什么意思?

    当我在 AWS Route 53 中添加 ELB 作为别名目标时 它会自动添加dualstack我的 ELB DNS 的前缀 这代表什么 当我尝试时dig 两者都返回相同的端点 注意 这是一个内部负载平衡器 The dualstackDNS
  • 可以让 WinDBG 在符号存储中找到 mscordacwks.dll 吗?

    问题 有很多手动方法可以让 WinDBG 在没有符号存储的情况下找到 mscordacwks dll 将文件放在某个路径中 将其放在与 Windbg exe 相同的文件夹中 将其放在我的 Framework v 文件夹中 在使用WinDBG
  • 图书馆的数据库架构

    我正在为我的大学的一个部门设计一个图书馆管理系统 我想吸引您关注我提出的架构 这篇文章主要涉及我们如何存储每本书的多个副本 我设计的一些东西让我感到不舒服 我希望你们都能指出更好的方法来解决问题 为了处理用户借书的情况 我设计了三个表 bo