Представляем новую таблицу между родительскими и дочерними таблицами - PullRequest
2 голосов
/ 23 октября 2010

Если у меня есть родительская и дочерняя таблица, заполненная данными, тривиально ли добавить новую таблицу между ними?

Например, перед введением соотношение:

Родитель -> Ребенок

Тогда:

Родитель -> Новая таблица -> Ребенок

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

Это может быть слишком очевидно, но ...

Насколько тривиально это будет зависеть от того, сколько кода уже написано, и это нужно изменить. Если это новое приложение с небольшим количеством написанного кода, и вы только начинаете работать над дизайном, то да, это тривиально. Если у вас есть тонны функций (будь то внешний код или код БД, например, хранимые процедуры и представления), которые обращаются к этим таблицам в ожидании исходного отношения, тогда это становится менее тривиальным.

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

Как и в случае со всеми проблемами разработки, вам просто нужно посмотреть, что будет затронуто, как и определить, как вы будете учитывать эти изменения.

Все это действительно многословный способ сказать "это зависит от вашей ситуации".

0 голосов
/ 25 октября 2010

Я совсем не согласен с Дэвидом, просто уточняю пару аспектов изменения.

Если вы внедрили разумные стандарты, то единственный код, на который влияет код, - это адрес, изменяющий измененные столбцыв Child (не New_Table).Если вы этого не сделаете, то придется изменить неизвестное количество кода, которое не нужно менять.

Второе соображение - это качество Первичного ключа в Child.Если у вас есть Natural Relational Keys, добавление New_Table будет иметь меньшее влияние, не требуя изменений данных.Если у вас есть ключи типа IDENTITY, вам может потребоваться перезагрузить или, что еще хуже, «перефакторизовать» ключи.

Последнее, введение New_Table - это исправление ошибки нормализации, что хорошо.Соответственно, определенные Child.columns станут New_Table.columns, и New_Table может быть загружен из существующих данных.Вы должны сделать это правильно и полностью, чтобы реализовать выигрыш в производительности от коррекции.Это может означать изменение еще нескольких сегментов кода.

Если у вас есть ANSI SQL, все задачи довольно просты и просты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...