Database design 改进关系设计用户国-州-市之间的关系数据库模型?
我设计了用户、国家、州和城市之间的数据库关系。我认为这不是一个好的设计,可能会有所改进,因为is有循环引用 哪一个是重新设计的好方法Database design 改进关系设计用户国-州-市之间的关系数据库模型?,database-design,relational-database,Database Design,Relational Database,我设计了用户、国家、州和城市之间的数据库关系。我认为这不是一个好的设计,可能会有所改进,因为is有循环引用 哪一个是重新设计的好方法 更新 带着这些答案,我找到了一个新的设计 在数据库设计中,不需要国家-州-城市的关系。这是多余的。因此,我的建议是删除表州和表城市 更新: 如果您的设计做得很好,并且有充分的理由保证您提到循环引用,那么留下这样的引用是没有问题的 我以为你有一个循环引用例外,但在阅读@reaanb post后,我同意他的观点 在数据库设计中,不需要国家-州-城市的关系。这是多余
更新 带着这些答案,我找到了一个新的设计
在数据库设计中,不需要国家-州-城市的关系。这是多余的。因此,我的建议是删除表州和表城市 更新: 如果您的设计做得很好,并且有充分的理由保证您提到循环引用,那么留下这样的引用是没有问题的
我以为你有一个循环引用例外,但在阅读@reaanb post后,我同意他的观点 在数据库设计中,不需要国家-州-城市的关系。这是多余的。因此,我的建议是删除表州和表城市 更新: 如果您的设计做得很好,并且有充分的理由保证您提到循环引用,那么留下这样的引用是没有问题的
我以为你有一个循环引用例外,但在阅读@reaanb post后,我同意他的观点 我正在努力找出你想要实现的目标。我可以想象两件事,但也可能是别的 首先,您试图只表示地理数据(包含在州中的城市,包含在国家中的城市)。用户指向一个城市,然后链接到一个州和一个国家 第二,您允许用户以3个精度级别中的任意一个级别提供他们的地址。也就是说,他们可以说他们居住在哪个城市,或者只是哪个州,甚至是哪个国家 如果您试图只做第一个,那么您应该摆脱用户->州和用户->国家关系,并将用户链接到just city。如果您需要知道用户所在的州和/或国家,只需从一个城市加入到另一个州和/或国家 如果你想做第二个,那么它看起来很像,所以我建议你阅读链接的帖子,看看你认为哪一个最适合你 如果你想两者兼顾,那么我认为你有两个选择。第一种方法是保持模式不变,但通过业务逻辑强制用户的地址字段中只有一个字段是非空的。这将避免用户可能指出的问题,例如,处于不同状态的州和城市 第二,明确你有3种地址类型(所有级别,仅国家+州,仅国家)。从表的角度来看,这是比较昂贵的,但可以更清楚地了解发生了什么,即约束不会隐藏在业务逻辑中 对于第二个选项,您将有如下内容: 用户
@用户id
(删除地址字段) 国家
@国家/地区id
(其他领域) 状态
@州id
国家/地区id(外键) 城市
@城市id
状态id(外键) L1\u地址
@l1_地址_id
国家/地区id(外键)
地址\u id(外键) L2\u地址
@l2\u地址\u id
状态id(外键)
地址\u id(外键) L3\u地址
@l3\u地址\u id
城市id(外键)
地址\u id(外键) 用户地址
@用户Id
@地址_id我正在努力找出你想要实现的目标。我可以想象两件事,但也可能是别的 首先,您试图只表示地理数据(包含在州中的城市,包含在国家中的城市)。用户指向一个城市,然后链接到一个州和一个国家 第二,您允许用户以3个精度级别中的任意一个级别提供他们的地址。也就是说,他们可以说他们居住在哪个城市,或者只是哪个州,甚至是哪个国家 如果您试图只做第一个,那么您应该摆脱用户->州和用户->国家关系,并将用户链接到just city。如果您需要知道用户所在的州和/或国家,只需从一个城市加入到另一个州和/或国家 如果你想做第二个,那么它看起来很像,所以我建议你阅读链接的帖子,看看你认为哪一个最适合你 如果你想两者兼顾,那么我认为你有两个选择。第一种方法是保持模式不变,但通过业务逻辑强制用户的地址字段中只有一个字段是非空的。这将避免用户可能指出的问题,例如,处于不同状态的州和城市 第二,明确你有3种地址类型(所有级别,仅国家+州,仅国家)。从表的角度来看,这是比较昂贵的,但可以更清楚地了解发生了什么,即约束不会隐藏在业务逻辑中 对于第二个选项,您将有如下内容: 用户
@用户id
(删除地址字段) 国家
@国家/地区id
(其他领域) 状态
@州id
国家/地区id(外键) 城市
@城市id
状态id(外键) L1\u地址
@l1_地址_id
国家/地区id(外键)
地址\u id(外键) L2\u地址
@l2\u地址\u id
状态id(外键)
地址\u id(外键) L3\u地址
@l3\u地址\u id
城市id(外键)
地址\u id(外键) 用户地址
@用户Id
@地址\u id您没有任何通知
user_id -> city_id
user_id -> state_id
user_id -> country_id
city_id -> state_id
state_id -> country_id