database - 这些数据模型中哪个是最正确的?

标签 database database-design relational-database

我正在为我将要开发的应用程序创建数据模型,我希望能就模型的一部分获得一些反馈。该应用程序将完全重新开发在 Lotus Notes 中创建的内容,重新开发的主要目的之一是转向关系数据存储层。

该应用程序专注于管理Things。应用程序的要求/约束​​是:

  1. Thing 必须有关联的Location
  2. Location 可以是例如“McDonalds”或“Melbourne Uni, Building AK, Room 301”,其中“Melbourne Uni”、“Building AK”和“Room 301”是单独相关的位置
  3. (至少)必须存在 3 层 Location
  4. 必须提供“其他”位置,以便用户可以为数据库中不存在的位置输入自由文本

所以我提出了上述 4 种不同的实现方式,但我并没有足够的 DBA 经验来知道哪一种是最正确的。

Location / Thing relational model

对此有任何想法和/或建议,我们将不胜感激!

最佳答案

如果您对三个级别的估计被证明是不充分的,那么两个选项 1 都可能被证明是不灵活的并且难以修改。

在您的选项 2 中,看起来可疑的实体是 ThingOtherLocations。任何(从它的名字)连接两个不同概念的东西都会被自动怀疑。如果你在这里确实有两个不同的概念,那么选项 2b 的结构不需要 OtherLocation 或 ThingOtherLocation。我怀疑你试图表示的关系(从中得到它的名字)实际上是位置之间的另一种关系——尽管我对此不清楚。

编辑

根据您对 ThingOtherLocations 的澄清,我建议您将与 Other 关联的文本简单地视为一个新位置,并将新位置与其他位置一起存储。似乎没有任何理由为这些情况包含特殊的数据库处理。

编辑

要处理子位置问题,您可能会考虑 Joe Celko 关于嵌套集的工作。对此的主要引用是:

Joe Celko.     
Joe Celko's Trees and Hierarchies in SQL for Smarties, 
(The Morgan Kaufmann Series in Data Management Systems)
ISBN 1-55860-920-2

关于database - 这些数据模型中哪个是最正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392413/

相关文章:

mysql - 套套套套?或者,对集合实现版本控制

MySQL 数据透视表 - 仅显示 A 的记录,但不在 B 的 ID 列表中

sql - 消息传递功能 创建 Sql 查询和数据库 View

sql - 什么是涵盖索引?

database - 有人知道音乐api和数据库吗?

mysql - 我是否能够在没有自动递增数字列的情况下执行基于数字的操作?

php - "Real"使用 Doctrine/MySQL 删除孤儿

php - 查询 list 并将多个结果发布到 mysql 中的表

mysql - 在 MySQL 中设计分层架构

sql-server - 如何将 data.txt 和 attributes.txt 以及 mapping.sql 获取到关系数据库