Создание таблицы в SQL и использование метаданных - PullRequest
1 голос
/ 14 апреля 2011

Для домашней работы, попросив сделать таблицу из БД, таблица соответствует филиалу универмага, эта таблица должна содержать следующую информацию:

CREATE TABLE STORE
(

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

У меня вопрос: нужны ли нам поля города, страны и региона, или с помощью информации метаданных я могу установить шаблон, для которого эта информация предоставляется декомпозицией первичного ключа id_state? Например, первые 3 цифры соответствуют стране, а следующие 3 соответствуют городу и т. Д.

1 Ответ

8 голосов
/ 14 апреля 2011

Вы никогда не захотите создать систему, в которой первичный ключ пытается кодировать данные о других атрибутах в строке.Это путь к великой душевной боли и большим страданиям.

  • Это делает обновления ужасно трудными.Например, если вы решите, что Мексика относится к региону Центральной Америки, а не к североамериканскому региону, вам придется пройти и обновить все первичные ключи для ваших мексиканских магазинов, а также все места в системе, на которые ссылаются эти первичные ключи.,Это огромный объем работы, невероятно маловероятно, что он действительно будет выполнен, и это очень дорогая операция с точки зрения времени выполнения и тестирования.
  • Это делает запрос данных намного более сложным.Теперь, если вы хотите найти все магазины в Мексике, вам нужно написать код, который делает множественные вызовы на SUBSTR и INSTR, чтобы разобрать, в какой стране находится строка. Это чрезвычайно сложнее индексировать и оптимизаторучтобы понять, чем отдельный столбец.Также гораздо сложнее убедиться, что у вас нет строк 'MEX', 'mex' и 'mx', представляющих Мексику.
  • И это нарушает общие принципы нормализации.Город, страна и регион - это отдельные идентифицируемые атрибуты магазина.Им следует дать отдельный столбец.
...