2010-05-12 5 views
1

Мы имеем ситуацию, когда таблица «A» является родительской таблицей, и, вероятно, существует около дюжины таблиц, которые являются дочерними элементами «A». В каждом случае существует соотношение 1: M между «A» и таблицами детей.Преобразование отношения 1: M к соотношению 1: 1

Вчера было решено, что эти дюжины отношений 1: M должны быть преобразованы в соотношение 1: 1. Таким образом, для каждой из десятков дочерних таблиц разработчик помещает уникальный индекс в столбец FK, который привязывает таблицу к «A». Это был его способ обеспечить связь 1: 1.

Я предложил ему, чтобы он, возможно, должен был удалить столбец FK в каждой из дочерних таблиц и создал столбец FK в таблице «A», который ссылался на каждую из дочерних таблиц. Он поставил под сомнение этот подход, потому что для каждой строки в «А» многие из столбцов FK столбцов будут нулевыми, потому что они не всегда требуются.

Каким будет желаемый подход в этой ситуации?

Спасибо - Рэнди

ответ

2

Если я правильно вас понимание может быть только одна строка каждого ребенка, связанного с определенной строки в родительской таблице.

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

2

На мой взгляд, ваш коллега/разработчик предложил наиболее подходящее решение.

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

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

Смежные вопросы