Пространственное моделирование: как создать таблицу без суррогатных первичных ключей? - PullRequest
0 голосов
/ 08 ноября 2018

Из того, что я понимаю, у нас нет Первичного ключа в таблице фактов, и использование суррогатного ключа - это пустая трата пространства. Следовательно, комбинация внешнего ключа является первичным ключом для таблицы фактов.

Но, возможно, я не смог этого сделать, потому что уникальные ключи потенциально могут повторяться в таблице фактов, например, Один и тот же человек дважды платил в один и тот же день в одном и том же ресторане. В этом случае первичный ключ больше не является уникальным ...

Есть ли способ решить эту проблему, не добавляя суррогатный ключ?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

InnoDB, если вы не предоставите ПК, предоставит его вам. Но это 6 байтов и скрыто. По сравнению с 4-байтовым суррогатом INT, это больше!

Проверьте данные; может существовать «естественный» PK, представляющий собой столбец или комбинацию столбцов.

Как правило, для DW единственным индексом, который я имею в таблице фактов, является PK. Затем я использую «Сводные таблицы» для основной части доступа. Это меньше и быстрее. В крайнем случае я буду очищать старые строки фактов (через DROP PARTITION), но зависать в сводных таблицах «навсегда». Это позволяет контролировать дисковое пространство, практически не теряя полезных данных.

Итог: укажите явное PK для каждой таблицы.

0 голосов
/ 08 ноября 2018

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

...