Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 主表和事务表之间的关系_Mysql_Database_Database Design_Relational Database_Entity Relationship - Fatal编程技术网

Mysql 主表和事务表之间的关系

Mysql 主表和事务表之间的关系,mysql,database,database-design,relational-database,entity-relationship,Mysql,Database,Database Design,Relational Database,Entity Relationship,在我的数据库设计中,我定义了主表(数据定义表,本质上是静态的),它将用于在我的网页中生成内容;以及用于存储用户输入的数据的事务表(这些表本质上是动态的) 考虑以下示例: 一组主表,包括与城市有1:M关系的州、与地方有1:M关系的城市 用于存储用户输入的个人详细信息的事务表用户。用户表具有地址、州、城市和地区等地址属性。这些属性可以定义为来自相应主表的1:M关系(State、City、Locality表中的特定记录可以是User表中多个记录的一部分) 我的问题是: 上述设计正确吗 此外,我认为

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

考虑以下示例:

一组主表,包括与城市有1:M关系的州、与地方有1:M关系的城市

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

我的问题是:

  • 上述设计正确吗
  • 此外,我认为在本地表和用户表之间定义1:M关系就足够了,因为其他两个属性(城市和州)可以从主表之间的关系中获得。将ER设计更改为以下内容是否更好
  • 除了我的要求,还有什么好的选择吗

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

你有什么疑问?您是否需要按
城市
进行搜索?即使你通过这些搜索,也不会影响我要说的

由于
地区
城市
是“嵌套”的,并且名称不太可能更改,因此我建议您的两个选项都“过度规范化”。一张桌子上放着三样东西是我的选择

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

  • 正在查找可能更改的字符串。通过将它放在一个单独的表中并指向该表,您只能在一个位置更改它。在您的示例中不需要这样做
  • 节省空间(从而提供速度等)。这确实适用于您的示例,但仅适用于
    地区
    级别,而不适用于
    地址
    。你可能会争辩说,
    city
    state
    可以重复;我想用“增加的复杂性(额外的表)不能保证最小的好处”来反驳

旁注:如果
地区
zipcode
,那么您的选项1至少有一个地方出了问题,我知道:洛斯阿尔托斯和洛斯阿尔托斯山(加利福尼亚州的两个不同城市)都有zipcodes 94022和94024的部分。

您的第一个设计违反了。第二个设计是正常的。那么,我可以继续我的第二个设计吗?或者有更好的选择吗?您可能会喜欢阅读以下相关问题:@eggyal,问题中描述的关系只是其中一种可能情况的示例。我需要知道的是,像我在上面的示例中所做的那样定义主表和事务表之间的关系是否合适。谢谢你的链接。:)一个很好的一般经验法则是“正常化,直到它受伤;然后去规范化,直到它起作用”。在此基础上,选项#2是最佳选项,除非/直到您遇到需要替代方法的问题。我如何将它们存储在一个公共表中?4列:id(主键)、Location、city、state。