База данных нормализована, но в результате составные ключи содержат 20 столбцов - PullRequest
1 голос
/ 17 мая 2010

Проблема в том, что существуют отношения, которые настолько огромны, что после нормализации они имеют, как 20 первичных ключей (составных ключей), которые действительно являются внешними ключами.

Они должны быть объявлены в качестве первичных ключей, чтобы однозначно идентифицировать отношения. Это правильно?

Ответы [ 4 ]

4 голосов
/ 18 мая 2010

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

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

Может быть, вы могли бы дать ему вторую попытку объяснить, что вы на самом деле имеете в виду.

2 голосов
/ 18 мая 2010

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

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

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

0 голосов
/ 17 мая 2010

У меня проблемы с визуализацией дизайна с 20 таблицами, имеющими отношение к одной таблице.

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

0 голосов
/ 17 мая 2010

Похоже, ваша база данных огромна и имеет много связей; Единственное, что вы можете сделать, чтобы упростить ситуацию с первичным ключом, - это определить один столбец в качестве первичного ключа для каждой таблицы и использовать автоматически увеличиваемый тип данных int или guid. Таким образом, вы можете гарантировать уникальность, и ваши внешние ключи будут, по крайней мере, независимы от вашего первичного ключа.

...