问题描述
|
为了做作业,要求我制作一个数据库表,该表对应一个百货商店的分支,该表必须包含以下信息:
CREATE TABLE STORE
(
id_store varchar (50),name_store varchar (50),city varchar (50),country varchar (50),region varchar (50)
);
我的问题是我们是否需要具有城市,国家和地区的字段,或者需要通过元数据信息来设置一个模式,该模式可通过主键id_state的分解为其提供信息?例如,前3位数字对应于国家/地区,后3位数字对应于城市,依此类推。
解决方法
您将永远都不想创建一个系统,在该系统中主键试图对行中其他属性的数据进行编码。那是通往极大的心痛和痛苦的道路。
这使更新非常困难。例如,如果您确定墨西哥属于中美洲地区而不是北美地区,则必须仔细检查并更新墨西哥商店的所有主键,以及系统中引用这些主键的每个位置。这是一项巨大的工作,实际上难以完成,而且在运行时和测试方面这是一项非常昂贵的操作。
这使得查询数据更加复杂。现在,如果要查找墨西哥的所有商店,则必须编写代码,对
SUBSTR
和INSTR
进行多次调用,以解析出行所在的国家/地区。这显然比建立索引更难索引,并且使优化器难以理解单独的列。确保没有代表墨西哥的\'MEX \',\'mex \'和\'mx \'行也要困难得多。
它违反了规范化的一般原则。城市,国家和地区是商店的独立可识别属性。应该给它们单独的一列。