Как нормализовать таблицу данных до 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: изображение, архив, фильм, аудио и т. д.