AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

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

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 35101
Accepted
J86
J86
Asked: 2013-02-21 08:09:44 +0800 CST2013-02-21 08:09:44 +0800 CST 2013-02-21 08:09:44 +0800 CST

ERD审查请

  • 772

我正在构建一个简单的数据库驱动的 Web 应用程序,但是通过阅读很多关于这个主题的书籍,我知道如果我的数据库搞砸了,那么我的应用程序也很可能会搞砸。

所以我想我会咨询数据库设计专家,并在进一步进行之前获得他们的帮助来审查我的想法。

应用程序:

将在 Google 地图上向最终用户提供 [活动信息] 的网站。有问题的事件是新书签名活动。

我想,人们阅读很多(我是其中之一),并且喜欢阅读,如果有一个用户可以访问的网站会很好:

  1. 输入他们的邮政编码(邮政编码),并在设定的英里半径范围内获取他们附近的所有事件。
  2. 输入他们最喜欢的作者姓名,并在世界地图上显示他/她的所有事件。

好主意不是吗?反正我是这么认为的:)

好的,基于以上,我知道我的事件表肯定包含一些地理信息,所以我读了这个。并为我的数据库想出了类似的东西。

  • 一场活动可以接待多位图书作者
  • 一位作者一次只能参加一个活动。

ERD 图 http://img24.imageshack.us/img24/6614/entityrelationshipdiagr.jpg

我意识到这是一个简单的数据库设计,但我的应用程序(至少现在)有一个非常简单的目标,那就是在 Google 地图上显示事件信息。

我将不胜感激任何反馈,我将来会遇到的任何陷阱……等等?

谢谢你。

database-design erd
  • 2 2 个回答
  • 521 Views

2 个回答

  • Voted
  1. Best Answer
    FrustratedWithFormsDesigner
    2013-02-21T09:10:22+08:002013-02-21T09:10:22+08:00

    通常,事件不是无限的。有不止一种方法可以在您的数据库中表示它:存储一个endTime, 或一个duration. 如果你不想强迫人们这样做,你可以把它设为可选,但如果活动在下午 4 点开始,有人在晚上 11 点出现,他们会因为错过了活动而感到失望,而且你的应用程序显然不够清晰甚至在晚上 9 点结束。你可能会成为他们批评的对象(是否合理是另一回事)。

    您可能还想添加一个notes字段,该字段只是一些文本,任何人都可以添加该字段以获取事件的特殊信息。

    此外,此设计不允许One Event Can Host Many Book Authors。从你的图表来看,一个事件似乎只能有一个作者。您可能需要一个像这样的新表:

    事件作者
    --------------
       事件编号
       作者编号
    

    如果您使该表具有复合键event_id和author_id,它将允许您拥有具有相同事件和不同作者的多条记录。当然,您必须author_id从events.

    至于一个作者一次只能参加一个活动。,这个有点棘手。您当前的架构不强制执行此操作,但我想您可以在您的应用程序中执行此操作。或者您可以在插入时触发event_authors,首先检查该作者的新事件的持续时间是否与同一作者的不同事件的任何其他事件重叠。

    • 2
  2. Neil McGuigan
    2013-02-21T11:11:38+08:002013-02-21T11:11:38+08:00

    author是一个法人,和attendee一样,所以你可以把他们放在一个Party表里,给他们一个Role,比如“author”或者“attendee”。一个人可以扮演作者或与会者或两者的角色。

    事件发生在设施处,设施是地址的一种。

    地址位于邮政/邮政编码处,这是一个地理位置。地址也位于城市(或其他地理区域)中,这也是一个地理位置。城市和邮政编码没有等级关系。

    如果一个事件可以承载许多作者,那么您需要一个 author_event 联结表。

    在此处输入图像描述

    (注意:author_event.event_id 应该是整数而不是 varchar)

    • 1

相关问题

  • 过滤索引是否有助于改进基于输入时间的查询,还是应该避免这种情况?

  • MySQL VARCHAR 和 TEXT 数据类型有什么区别?

  • 存储计算值或根据要求重新计算它们更好吗?[复制]

  • 存储与计算聚合值

  • 在数据仓库中实现多对多关系有哪些方法?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • 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
    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
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +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