Ответ 1
Прежде чем вы начнете читать нормализацию, пока у вас не возникнет никаких вопросов по этому поводу. Если вы делали это только в школе, вы, вероятно, еще недостаточно знаете об этом, чтобы создавать дизайн.
Соберите ваши требования для каждого модуля тщательно. Вам нужно знать:
Бизнес-правила (которые специфичны для приложений и которые должны применяться в базе данных, поскольку они должны применяться ко всем записям независимо от источника),
Существуют ли правовые или нормативные проблемы (например, HIPAA или требования Сарбейнса-Оксли) безопасность (нужно ли шифровать данные?)
Какие данные вам нужно хранить и почему (эти данные доступны где-либо еще)
Какие части данных будут иметь только одну строку данных, а какие должны иметь несколько строк?
Как вы намереваетесь обеспечить уникальность строки в каждой таблице? У вас есть естественный ключ или вам нужен суррогатный ключ (предлагайте суррогатный ключ почти во всех случаях)?
Вам нужна репликация?
Вам нужен аудит?
Как данные будут вводиться в базу данных? Будет ли оно поступать из приложения по одной записи за раз (или даже из нескольких приложений), или будет частично из массовых вставок из инструмента ETL или из другой базы данных.
Нужно ли вам знать, кто внес запись и когда (весьма вероятно, что это потребуется в корпоративной системе.
Какие таблицы поиска вам понадобятся? Ввод данных намного более точен, когда вы можете использовать справочные таблицы и ограничивать пользователей значениями.
Какой тип проверки данных вам нужен?
Примерно сколько записей будет в системе? Вам нужно иметь представление о том, насколько велики размеры ваших тестовых данных.
Как вы собираетесь запрашивать данные? Будете ли вы использовать хранимые процедуры или ORM или динамические запросы?
Некоторые очень простые вещи, которые нужно запомнить в вашем дизайне. Выберите правильный тип данных для ваших данных. Не храните даты или числа, для которых вы собираетесь выполнять математические операции, в строковых полях. Храните числа, которые не являются кандидатами на математику (номера деталей, почтовые индексы, номера телефонов и т.д.), В качестве строковых данных, так как вам могут понадобиться начальные нули. Не храните более одной информации в поле. Таким образом, нет списков с запятыми (они указывают на необходимость связанной таблицы), и, пока вы занимаетесь этим, если вы обнаружите, что делаете что-то вроде phone1, phone2, phone 3, немедленно остановитесь и создайте связанную таблицу. Используйте внешние ключи для обеспечения целостности данных.
На протяжении всего вашего проекта учитывайте целостность данных. Данные, которые не имеют целостности, не имеют смысла и бесполезны. Проектируйте для повышения производительности, это очень важно для проектирования баз данных и НЕ является преждевременной оптимизацией. Реализовать базу данных нелегко, поэтому важно правильно определить наиболее важные части уравнения производительности. Фактически все базы данных должны быть спроектированы для обеспечения целостности данных, производительности и безопасности.
Не бойтесь иметь несколько объединений, при правильной индексации они будут работать очень хорошо. Не пытайтесь поместить все в таблицу типов значений сущностей. Используйте их как можно реже. Попробуйте научиться мыслить с точки зрения обработки наборов данных, это поможет вашему дизайну. Базы данных оптимизированы для работы в наборах.
Там больше, но этого достаточно, чтобы начать переваривать.