1

做作业,让我做一个DB的表,表对应一个百货公司的分店,这个表必须包含以下信息:

CREATE TABLE STORE
(

id_store varchar (50),
name_store varchar (50),
city varchar (50),
country varchar (50),
region varchar (50)
);

我的问题是我们是否需要城市、国家和地区的字段,或者通过元数据信息我可以设置一个模式,该信息由主键 id_state 的分解提供?例如,前 3 位对应国家,后 3 位对应城市,以此类推。

4

1 回答 1

8

您永远不会希望创建一个主键尝试对行中其他属性的数据进行编码的系统。那是通往巨大心痛和痛苦的道路。

  • 它使更新变得非常困难。例如,如果您决定墨西哥属于中美洲地区而不是北美地区,您将必须检查并更新墨西哥商店的所有主键以及系统中引用这些主键的每个位置. 这是一项巨大的工作,实际上不可能完成,而且就运行时和测试而言,这是一项非常昂贵的操作。
  • 它使查询数据变得更加复杂。现在,如果您想找到墨西哥的所有商店,您必须编写代码来多次调用SUBSTRINSTR解析出一行所在的国家/地区。这比单独的列更难以索引和优化器理解. 确保您没有代表墨西哥的“MEX”、“mex”和“mx”行也更加困难。
  • 它违反了规范化的一般原则。城市、国家和地区是商店的独立可识别属性。应该给它们一个单独的列。
于 2011-04-13T23:13:31.453 回答