2015-11-23 2 views
0

Я не нашел здесь статей, близких к тому, что я искал. Я прочитал несколько тем, но они не сказали слишком много о базе данных и нормализации. Я узнал о нормализации из PHP и MySql для книги Dynamic Web Sites.Создайте базу данных mysql и используйте нормализацию

Я привел пример и, потому что у меня нет профессора, чтобы исправить меня, мне нужна ваша помощь, чтобы рассказать мне, прав я или нет.

Моего примера для базы данных шутки с 4-мя столов: пользователей Страница Категории (анекдоты, короткие фильмы и т.д.) Подкатегория (блондинки, полиция, понижает, охотники и т.д.)

Это результат после того, как я применил все три формы нормализации:

CREATE TABLE `categories` (
    `category_id` SMALLINT NOT NULL AUTO_INCREMENT, 
    `category` VARCHAR(30) NOT NULL, 
    PRIMARY KEY (`category_id`), 
    UNIQUE KEY `category` (`category`) 
) ; 

CREATE TABLE `subcategories` (
    `subcategory_id` SMALLINT NOT NULL AUTO_INCREMENT, 
    `category_id` SMALLINT NOT NULL, 
    `subcategory` VARCHAR(30) NOT NULL, 
    PRIMARY KEY (`subcategory_id`), 
    UNIQUE KEY `subcategory` (`subcategory`) 
) ; 



CREATE TABLE `pages` (
    `id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    `category_id` SMALLINT UNSIGNED NOT NULL, 
    `subcategory_id` SMALLINT UNSIGNED NOT NULL, 
    `user_id` SMALLINT UNSIGNED NOT NULL, 
    `title` VARCHAR(100) NOT NULL, 
    `content_page` LONGTEXT NOT NULL, 
    `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    KEY `category_id` (`category_id`), 
    KEY `creation_date` (`date_created`) 
); 

CREATE TABLE `users` (
    `user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    `type` ENUM('member','admin', 'superadmin') NOT NULL, 
    `username` VARCHAR(30) NOT NULL, 
    `email` VARCHAR(80) NOT NULL, 
    `pass` VARBINARY(32) NOT NULL, 
    `first_name` VARCHAR(20) NOT NULL, 
    `last_name` VARCHAR(40) NOT NULL, 
    `date_expires` DATE NOT NULL, 
    `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `date_modified` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`user_id`), 
    UNIQUE KEY `username` (`username`), 
    UNIQUE KEY `email` (`email`) 
) ; 

ответ

1

Кажется, что это okey, но, возможно, вы делаете это еще лучше.

  • В пользователи стол вместо type ENUM ('член', 'админ', 'суперамин') NOT NULL,

добавить новую таблицу под названием UserType

  • TypeId (первичный ключ)
  • ТипName

и оптимизировать таблицу пользователей добавить

  1. TypeId
  2. ManagerID (с этим атрибутом вы можете узнать, кто является администратором этой пользователя или суперамин)

последний шаг Если у вас есть много подкатегорий разделяет таблицы. Если вы это сделаете, вы можете добавить разные атрибуты в свои подкатегории (возможно, время для короткошерстных).

Добавление новых столов не является отходами, если оно делает дизайн более прозрачным. Но если этого достаточно, добавление большего количества таблиц не имеет смысла.

+0

Это очень хороший совет. Спасибо. – dragon

+0

Добро пожаловать! –

Смежные вопросы