Как нормализовать таблицу данных до 3NF

Я не понимаю, как нормализовать таблицу БД в 3NF?

FileName    FileName
Directory   Directory
FileType    FileType (Image, Archive, Movie)
PType           Freeware or shareware (need to be buyed)
UploadedDateTime Uploaded date time 
CheckedDateTime Checked date time
FileSize    size of file
Keywords    like: family, home, work, etc (something like tags)

Как я понимаю, нам нужно создать 3 дополнительные таблицы (для fileTypes, для PTypes и для ключевых слов) и 3 таблицы подключения. Я прав?

1 ответ

Решение

Вы можете хранить отдельные таблицы для FileType, PType и Keywords. Например, FileType имеет два столбца - идентификатор и тип. Аналогично для Ptype и Keyword.

Далее, Directory: FileName является отношением 1:N. Таким образом, будет таблица Directory и таблица FileName с идентификатором каталога в качестве внешнего ключа.

FileName: Keyword и FileName: FileType являются отношениями N:N. Я предполагаю, что FileName: FileType имеет значение N:N, поскольку файл может быть заархивированным фильмом (архив + фильм).

Не уверен, что FileName: PType имеет значение N:N. Зависит от вашего варианта использования, хотя. Я вижу это как 1:N. FileName может быть бесплатным или условно-бесплатным, но не обоими. Здесь будет достаточно простого отношения с внешним ключом, нет необходимости в таблицах "соединения".

Я предполагаю, что даты будут атрибутами (столбцами) таблиц FileName и Directory, не так ли? Если даты получены для Справочника (максимальная дата всех имен файлов в этом каталоге), вам не понадобится этот столбец в таблице Справочника, так как он рассчитывается из других полей.

Надеюсь, этого достаточно для начала.

Обновить:

Имя файла

+----+----------+-------+------+------------------+
| id | filename | dates | size | directoryid (FK) |
+----+----------+-------+------+-------------+----+

каталог

+----+---------+-------+------+
| id | dirname | dates | size |
+----+---------+-------+------+

даты не требуются, если получены из таблицы имен файлов

размер не требуется, если получено из таблицы имен файлов

filename_keyword

+-----+-------------+-----------------+
| id  | fileid (FK) |  keywordid (FK) |
+-----+-------------+-----------------+

filename_ptype

+----+-------------+--------------+
| id | fileid (FK) | ptypeid (FK) |
+----+-------------+--------------+

Если имя файла может иметь только один ptype, добавьте ptype_id к таблице имен файлов в качестве внешнего ключа. Нет необходимости для filename_ptype.

filename_filetype

+----+-------------+-----------------+
| id | fileid (FK) | filetypeid (FK) |
+----+-------------+-----------------+

PTYPE

+----+-------+
| id | ptype |
+----+-------+

ключевое слово

+----+---------+
| id | keyword |
+----+---------+

тип файла

+----+----------+
| id | filetype |
+----+----------+

Возможные значения filetype: изображение, архив, фильм, аудио и т. д.

Другие вопросы по тегам