主表和事务表之间的关系

时间:2015-04-05 06:38:26

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

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

考虑以下示例:

State 组成的主表,与 City City 具有1:M关系,与地点具有1:M的关系

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

enter image description here

我的问题:

  • 上述设计是否正确?
  • 此外,我认为在 Locality User 表之间定义1:M关系已经足够了,因为其他两个属性(城市和州)可以从主表之间的关系中获得。将ER设计更改为以下内容会更好吗?enter image description here
  • 我的要求有什么好的选择吗?

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

1 个答案:

答案 0 :(得分:0)

你有什么疑问?您是否需要按statecity进行搜索?即使你按照那些搜索,它也可能不会影响我要说的......

由于localitycitystate已嵌套'并且名称不太可能改变,我建议你的两个选项都是"过度标准化"。一张包含所有三个项目的表格就是我要去的方式。

正如我所看到的,正常化有两个主要原因:

  • 找到可能会更改的字符串。通过将其放在一个单独的表中并指向该表,您只能在一个地方更改它。您的示例中不需要这样做。
  • 节省空间(因此提供速度等)。这适用于您的示例,但仅适用于locality级别,而不是address级别。您可能会认为可以对citystate进行重复数据删除;我会反对"增加的复杂性(额外的表格)不能保证最小的利益。"。

附注:如果localityzipcode,则您的选项1至少在我知道的地方遇到麻烦:Los Altos和Los Altos Hills(加利福尼亚州的两个不同城市)两个都有段码94022 94024。