【问题标题】:Relationships between Master and Transaction tables主表和事务表之间的关系
【发布时间】:2022-03-21 07:03:10
【问题描述】:

在我的数据库设计中,我定义了主表(数据定义表,本质上是静态的),它将用于在我的网页中生成内容;和事务表,用于存储用户输入的数据(这些表本质上是动态的)。

考虑以下示例:

StateCity 具有 1:M 关系的主表组成,CityLocality 具有 1:M 关系.

一个事务表用户,用于存储用户输入的个人详细信息。 User 表具有地址属性,例如 Address、State、City 和 Locality。这些属性可以定义为来自相应主表的 1:M 关系(StateCityLocality 表中的特定记录可以是User 表中的多条记录的一部分)。

我的问题:

  • 上面的设计正确吗?
  • 此外,我认为在 LocalityUser 表之间定义 1:M 关系就足够了,因为其他两个属性(City 和 State)可以从主表之间的关系。把ER设计改成下面这样会更好吗?
  • 我的要求有什么好的替代方案吗?

PS:我是数据库设计的初学者。

【问题讨论】:

标签: mysql database database-design relational-database entity-relationship


【解决方案1】:

您有什么疑问?您是否需要通过statecity 进行搜索?即使您按这些搜索,也可能不会影响我要说的内容...

由于localitycitystate 是“嵌套的”并且名称不太可能更改,因此我建议您的两个选项都“过度规范化”。我会走一张桌子,里面放着所有三样东西。

在我看来,规范化有两个主要原因:

  • 定位一些可能会改变的字符串。通过将其放在单独的表中并指向该表,您只能在一个地方更改它。您的示例中不需要这样做。
  • 节省空间(因此提供速度等)。这确实适用于您的示例,但仅适用于locality 级别,不适用于address。您可能会争辩说citystate 可以被删除;我会反驳“增加的复杂性(额外的表格)并不能保证最小的收益。”。

附注:如果 localityzipcode,那么您的选项 1 至少有一个我知道的地方有问题:Los Altos 和 Los Altos Hills(加利福尼亚州的两个不同城市)两者 em> 有部分邮政编码 94022 94024。

【讨论】:

  • 如何将它们全部存储在一个公用表中?
  • 4 列:id(主键)、位置、城市、州。
猜你喜欢
  • 1970-01-01
  • 2018-09-03
  • 2023-02-22
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
相关资源
最近更新 更多