【发布时间】:2022-03-21 07:03:10
【问题描述】:
在我的数据库设计中,我定义了主表(数据定义表,本质上是静态的),它将用于在我的网页中生成内容;和事务表,用于存储用户输入的数据(这些表本质上是动态的)。
考虑以下示例:
由 State 与 City 具有 1:M 关系的主表组成,City 与 Locality 具有 1:M 关系.
一个事务表用户,用于存储用户输入的个人详细信息。 User 表具有地址属性,例如 Address、State、City 和 Locality。这些属性可以定义为来自相应主表的 1:M 关系(State、City、Locality 表中的特定记录可以是User 表中的多条记录的一部分)。
我的问题:
- 上面的设计正确吗?
- 此外,我认为在 Locality 和 User 表之间定义 1:M 关系就足够了,因为其他两个属性(City 和 State)可以从主表之间的关系。把ER设计改成下面这样会更好吗?
- 我的要求有什么好的替代方案吗?
PS:我是数据库设计的初学者。
【问题讨论】:
-
你的第一个设计违反了3NF。第二种设计是正常的。
-
那么,我可以继续我的第二个设计吗?还是有更好的选择?
-
您可能想阅读以下相关问题:Best practices for storing postal addresses in a database (RDBMS)?Is there common street addresses database design for all addresses of the world?How should international geographical addresses be stored in a relational database?What is the “best” way to store international addresses in a database?
-
@eggyal,问题中描述的关系只是其中一种可能情况的示例。我需要知道的是,像我在上面的示例中所做的那样,定义主表和事务表之间的关系是否合适。感谢您的链接。 :)
-
一个好的一般经验法则是“规范化,直到它受伤;然后去规范化,直到它起作用”。在此基础上,选项 #2 是最佳选择,除非/直到您遇到需要替代方法的问题。
标签: mysql database database-design relational-database entity-relationship