Краткий ответ : Нормализация никогда не становится нелепой. Большая часть того, что вы делаете, не является нормализацией.
Более длинный ответ
«Наихудшее» (по правде говоря, «лучшее»), которое может сделать большинство дизайнеров, - это получить все таблицы в 5NF. 5NF вовсе не смешно (да, я знаю о 6NF. Я игнорирую это по дидактическим причинам.)
спрашивает, правильно ли я отношусь к попытке планирования
для будущего расширения
Это хороший вопрос для себя. Это не имеет ничего общего с нормализацией, хотя. На концептуальном уровне нормализацию - это то, что вы делаете после , когда вы решили, какие атрибуты (столбцы) и данные должны попадать в вашу базу данных. Опытные разработчики баз данных часто «думают в 3NF», выбирая атрибуты, данные и нормализуя все одновременно, более или менее.
Должен ли я выбрать шаблон наследования или просто внешний ключ
Таблица «Доноры и получатели персоны»?
Доноры и получатели не разные люди. Доноры - это люди, которые сделали пожертвование. Получатели - это люди, которые что-то получили.
id fullname don_date don_amt recip_date recip_amt
--
1 Jamie Hubbert 2012-01-13 $20.00
1 Jamie Hubbert 2012-02-13 $17.00
2 Kelly Hawkin 2012-01-13 $50.00
2 Kelly Hawkin 2012-01-13 $20.00
3 Neva Papke 2012-01-13 $15.00
3 Neva Papke 2012-02-13 $15.00
2 Kelly Hawkin 2012-01-13 $10.00
4 Jamie Hubbert 2012-01-13 $10.00
4 Jamie Hubbert 2012-02-13 $10.00
Во время нормализации вы бы идентифицировали эти зависимости. (Для простоты предполагается одно пожертвование на человека в день.)
- person_id -> person_name
- person_id -> электронная почта
- person_id, donation_date -> donation_amount
- person_id, rece_date -> rece_amount
Нормализуйте до 5NF, и вы получите эти три таблицы.
Persons
--
1 Jamie Hubbert
2 Kelly Hawkin
3 Neva Papke
4 Jamie Hubbert
Donations
--
1 2012-01-13 $20.00
1 2012-02-13 $17.00
2 2012-01-13 $50.00
2 2012-01-13 $20.00
4 2012-01-13 $10.00
Receipts (?)
--
3 2012-01-13 $15.00
3 2012-02-13 $15.00
2 2012-01-13 $10.00
4 2012-02-13 $10.00
Изначально я думал о том, чтобы просто отобразить свойства, такие как
свойства email_address и адреса в вещах
что они нужны, но тогда может возникнуть вероятность, что человек будет
иметь несколько адресов электронной почты или почтовых адресов (например, дома, на работе,
и др.).
Решение о том, поддерживать ли несколько адресов электронной почты, несколько адресов электронной почты и разные адреса доставки и почты, является важным конструктивным решением. Но это никак не связано с нормализацией. Опять же, нормализация - это то, что вы делаете после того, как вы решили, какие атрибуты и данные принадлежат вашей базе данных. Таким образом, если вы собирали репрезентативных примеров данных, вы можете получить один из этих двух наборов адресов электронной почты.
Set A
1 Jamie Hubbert jhubbert@somedomain.com
4 Jamie Hubbert jamie.hubbert@this.com
Set B
1 Jamie Hubbert jhubbert@somedomain.com
1 Jamie Hubbert jamie@my.com
4 Jamie Hubbert jamie.hubbert@this.com
В наборе A, person_id-> email. В наборе B это не так. Выбор поддержки данных в наборе A или данных в наборе B является большим решением, и оно сильно влияет на то, что вы в итоге получите после , нормализуя до 5NF. Но решение о том, какой набор поддерживать, не имеет ничего общего с нормализацией.
Кроме того, выбор присвоения идентификационных номеров неуникальным адресам электронной почты является еще одним важным (и сомнительным) дизайнерским решением. Как и другие, это решение не имеет ничего общего с нормализацией.
(Случайные имена любезно предоставлены Генератор случайных имен .)