在SQL中创建表,并利用元数据

fra*_*a66 1 sql oracle metadata create-table

要做作业,要我制作一个DB表,该表对应一个百货商店的分支,该表必须包含以下信息:

CREATE TABLE STORE
(

id_store varchar (50),
name_store varchar (50),
city varchar (50),
country varchar (50),
region varchar (50)
);
Run Code Online (Sandbox Code Playgroud)

我的问题是我们需要拥有城市,国家和地区的字段,还是通过元数据信息我可以设置一个模式,通过主键id_state的分解来提供该信息?例如,前3个数字对应于国家,后3个对应于城市,依此类推.

Jus*_*ave 8

您永远不会想要创建一个系统,其中主键尝试编码有关该行中其他属性的数据.这是通往极度痛苦和痛苦的道路.

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