设计数据库的正确方法

巴拉吉
Country table
  country_id,country_name

State table
  state_id,state_name,state_country_id

City table
  city_id,city_name,city_state_id

Product table
  product_id,product_name,product_city_id

以上设计好吗?如果我想检索产品国家/地区ID,则必须编写子查询或内部联接。

还是可以如下修改产品表?

Product table
  product_id,product_name,product_city_id,product_state_id,product_country_id
伦纳特

您的建议违反了3NF(假设您的候选密钥很明显)。3NF声明(根据Wikipedias的定义,http//en.wikipedia.org/wiki/Normal_forms#Normal_forms):

“每个非主键属性都非传递性地依赖于表中的每个候选键。从表中删除对主键的描述无用的属性。换句话说,不允许传递性依赖。”

在您建议的修改中,product_id是候选键,但是product_country_id是可传递地依赖于product_id

就是说,在某些情况下,出于实际原因,您可能选择违反常规格式,但是您应该意识到自己正在这样做,并采取额外的预防措施以防止更新异常。

旁注:IMO最好使用诸如country_code之类的标准标识符代替country_id,请参见ISO 3166(http://en.wikipedia.org/wiki/ISO_3166-1_alpha-3

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为基于事件的分析设计数据库架构

来自分类Dev

正确的数据库设计中,哪个ERD更正确?

来自分类Dev

如何设计数据库以容纳此数据

来自分类Dev

数据库设计正确实践

来自分类Dev

颜色和尺寸的库存设计数据库

来自分类Dev

使用OOPS设计数据库表架构?

来自分类Dev

迁移Postgres数据库的正确方法?

来自分类Dev

使用相似但不同的模型设计数据库

来自分类Dev

如何为Google表单等字段设计数据库?

来自分类Dev

设计数据库并编写分数查询的SQL查询

来自分类Dev

使用Singleton设计模式正确打开/关闭数据库

来自分类Dev

数据库设计中的最佳方法

来自分类Dev

数据库设计方法决策

来自分类Dev

如何设计数据存储数据库关系

来自分类Dev

数据库设计的最佳方法

来自分类Dev

混淆是否使用正确的数据库设计概念将使设计PHP登录系统变得困难

来自分类Dev

设计数据库-游戏表

来自分类Dev

在设计数据库时需要帮助

来自分类Dev

设计数据库模型和相关的sql查询

来自分类Dev

颜色和尺寸的库存设计数据库

来自分类Dev

数据库设计

来自分类Dev

设计数据库时,需要知道我是否做得正确

来自分类Dev

如何为问答网站设计数据库?

来自分类Dev

正确的数据库操作方法

来自分类Dev

如何从表单设计数据库表?

来自分类Dev

从oltp数据库设计数据仓库

来自分类Dev

关于设计数据库

来自分类Dev

为产品变体设计数据库的最佳方式

来自分类Dev

处理数据库请求的正确方法