Мне нравится Copyconstructors:
public AnyObject(AnyObject anyObject)
{
foreach (var property in typeof(AnyObject).GetProperties())
{
property.SetValue(this, property.GetValue(anyObject));
}
foreach (var field in typeof(AnyObject).GetFields())
{
field.SetValue(this, field.GetValue(anyObject));
}
}
Если у вас есть что-то, что можно скопировать, добавьте их
У меня есть несколько довольно простых эмпирических правил, за которыми я следую при разработке баз данных, которые я думаю, может использоваться, чтобы помочь принять решения как это....
обычный результат этих правил состоит в том, что начальный дизайн будет способствовать таблицам по столбцам с вниманием на устранение дублирования. В то время как проект прогрессирует, и точки денормализации определяются, полная структура разовьется к балансу, который идет на компромисс с ограниченным дублированием и быстрым увеличением столбца в обмен на другие ценные преимущества.
Я думаю, что необходимо посмотреть на вид данных, которые Вы храните, прежде чем Вы примете то решение. Наличие таблицы адреса является большим, но только если вероятность нескольких человек, совместно использующих тот же адрес, высока. Если у каждого человека были различные адреса, сохранение тех данных в различной таблице просто представляет ненужные соединения.
я не вижу преимущества наличия городской таблицы, если города в себя не являются объектами, Вы заботитесь о в Вашем приложении. Или если Вы хотите ограничить количество городов, доступных Вашим пользователям.
Нижняя строка является решениями как это, должны взять само приложение в рассмотрение, прежде чем Вы начнете стрелять для эффективности. IMO.
Существуют огромные преимущества для запросы использование как можно меньше столбцов. Но сама таблица может иметь большое количество. Jeff говорит что-то относительно этого также.
В основном, удостоверьтесь, что Вы не просите больше, чем, Вам нужно при выполнении запроса - производительность запросов непосредственно связана с числом столбцов, которые Вы просите.
Хм.
я думаю, что это - промывка и зависит от Вашей конкретной модели дизайна. Определенно факторизуйте объекты, которые имеют больше, чем несколько полей в их собственную таблицу, или объекты, состав которых, вероятно, изменится как изменения требований Вашего приложения (например - я факторизовал бы адрес так или иначе, так как это имеет столько полей, но я был бы особенно , делают это, если бы Вы думали, что был любой шанс, необходимо было бы обработать адреса иностранного государства, которые могут иметь другую форму. То же с номерами телефона).
Однако когда Вы получены это работа, смотрят в оба на производительности. Если Вы вращали объект, который требует, чтобы Вы сделали большие, дорогие соединения, возможно, это становится лучшим проектным решением вращать ту таблицу назад в оригинал.
Существуют многие стороны к этому, но от перспективного пятнышка эффективности приложений таблицы могут время от времени быть более эффективными. Если у Вас есть несколько таблиц с набором столбцов каждый раз дб, чтобы сделать операцию, он имеет шанс создания блокировки, больше данных сделано недоступным продолжительности блокировки. Если блокировки наращиваются к странице и таблицам (хорошо, надо надеяться, не таблицы:)) Вы видите, как это может замедлить систему.
я рассмотрел бы нормализацию как первый шаг, таким образом, города, округа, состояния, страны будут лучше как отдельные столбцы..., питание языка SQL, вместе с сегодня системами управления базами данных позволяет Вам сгруппировать свои данные позже, если необходимо просмотреть его в некотором другом, ненормализованном представлении.
, Когда система разрабатывается, Вы могли бы рассмотреть 'ненормализацию' некоторой части, если Вы рассматриваете что как улучшение.
Я думаю, что баланс в порядке в этом случае. Если имеет смысл помещать столбец в таблицу, то помещенный это в таблицу, если это не делает, то не делает. Ваш подход коллег определенно помог бы нормализовать базу данных, но это не могло бы быть очень полезно, если необходимо присоединиться к 50 таблицам вместе для получения информации, Вам нужно.
я предполагаю то, чем был бы мой ответ, используйте свое лучшее решение.
Как все остальное: это зависит.
нет никакого жесткого правила относительно количества столбцов по сравнению с количеством таблицы.
, Если у Ваших клиентов должно быть несколько адресов, то отдельная таблица для этого имеет смысл. Если у Вас есть действительно серьезное основание нормализовать столбец City в его собственную таблицу, то это может пойти также, но я не видел, что прежде, потому что это (обычно) - поле свободной формы.
таблица А тяжелый, нормализованный дизайн эффективен с точки зрения пространства и выглядит "хорошим для учебника", но может стать чрезвычайно сложным. Это выглядит хорошим, пока Вы не должны делать 12 соединений для получения имени и адреса клиента. Эти проекты не автоматически фантастические с точки зрения производительности, которая имеет значение больше всего: запросы.
Избегают сложности, если это возможно. Например, если у клиента может быть только два адреса (не произвольно многие), то могло бы иметь смысл просто сохранять их всех в единственной таблице (CustomerID, Имя, ShipToAddress, BillingAddress, ShipToCity, BillingCity, и т.д.).
Вот сообщение Jeff по теме.
База данных мультитаблицы намного более гибка, если какая-либо из этих связей "один к одному" может стать той многим или многим многим в будущем. Например, если необходимо сохранить несколько адресов для некоторых клиентов, намного легче, если у Вас есть потребительская таблица и таблица адреса. Я не могу действительно видеть ситуацию, где Вы, возможно, должны были бы копировать некоторые части адреса, но не других, так отдельный адрес, город, состояние, и таблицы zip могут быть немного чрезмерными.
Каждая таблица должна только включать столбцы, которые принадлежат объекту, это однозначно определяется первичным ключом. Если бы все столбцы в базе данных являются всеми атрибутами того же объекта, то Вам только была бы нужна одна таблица со всеми столбцами.
, Если бы какой-либо из столбцов может быть пустым, тем не менее, необходимо было бы поместить каждый nullable столбец в его собственную таблицу с внешним ключом к основной таблице для нормализации его. Это - общий сценарий, таким образом, для более чистого дизайна, Вы, вероятно, будете добавлять больше таблиц, чем столбцы к существующим таблицам. Кроме того, путем добавления этих дополнительных атрибутов к их собственной таблице они больше не должны были бы позволять, аннулирует, и Вы избегаете убивания СВЯЗАННЫХ С ПУСТЫМ УКАЗАТЕЛЕМ проблем.
Это зависит от Вашей разновидности базы данных. SQL Server MS, например, имеет тенденцию предпочитать более узкие таблицы. Это - также более 'нормализованный' подход. Другие механизмы могли бы предпочесть его наоборот. Мэйнфреймы имеют тенденцию падать в той категории.
Полностью нормализованный дизайн (т.е., "Больше Таблиц") более гибок, легче поддержать и избегает дублирования данных, что означает, что Ваша целостность данных будет намного легче осуществить.
Те - мощные причины нормализовать. Я принял бы решение нормализовать сначала, и затем только, чтобы денормализовать конкретный таблицы после , Вы видели, что производительность становилась проблемой.
Мой опыт состоит в том, что в реальном мире, Вы не достигнете точки, где денормализация необходима, даже с очень большими наборами данных.
Я спорил бы в пользу большего количества таблиц, но только до определенного момента. Используя Ваш пример, если Вы разделили информацию своего пользователя на две таблицы, говорят, что ПОЛЬЗОВАТЕЛИ и АДРЕС, это дает Вам гибкость для имения нескольких адресов на пользователя. Одно очевидное приложение этого является пользователем, у которого есть отдельные адреса выставления счета и адреса поставки.
аргумент в пользу наличия отдельной таблицы CITY был бы то, что только необходимо сохранить название каждого города однажды, затем обратитесь к нему при необходимости в нем. Это действительно уменьшает дублирование, но в этом примере я думаю, что это - излишество. Это может быть больше эффективного пространства, но Вы заплатите цену в соединениях при выборе данных из базы данных.
Это так не походит на вопрос о таблицах/столбцы, но о нормализации. В некоторых ситуациях имеют высокую степень , нормализация ("больше таблиц" в этом случае) является хорошей, и чистой, но она обычно берет высокое количество СОЕДИНЕНИЙ для получения релевантных результатов. И с достаточно большим набором данных, это может сорвать производительность.
Jeff записал немного об этом относительно дизайна StackOverflow. См. также сообщение, ссылки Jeff на Отваживаются Obasanjo.
Существуют преимущества для наличия таблиц с меньшим количеством столбцов, но также необходимо посмотреть сценарий выше и ответить на эти вопросы:
клиенту разрешат иметь больше чем 1 адрес? В противном случае тогда отдельная таблица для адреса не необходима. Если так, тогда отдельная таблица становится полезной, потому что можно легко добавить больше адресов по мере необходимости в будущем, где становится более трудным добавить больше столбцов к таблице.