2015-11-23 39 views
0

我没有在这里找到任何接近我正在寻找的文章。我读了几个主题,但其中没有一个关于数据库和规范化太多。我从动态网站的PHP和MySql书中了解了规范化。创建一个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

看起来很棒,但也许你会让它变得更好。

  • 用户表而不是type ENUM( '成员', '管理', '超级管理员')NOT NULL,

添加一个名为用户类型

  • 新表TypeId(主键)
  • TypeName

和优化用户表 添加

  1. TYPEID
  2. 经理ID(具有这种属性,你可以知道谁是这个用户的管理员或者超级管理员)

最后一步 如果你有很多子类别分开表格。如果你这样做,你可以添加不同的属性到你的子类别(可能是短时间的)。

只要设计更清晰,添加新表并不是一种浪费。但如果足够了,增加更多的表格就没有意义了。

+0

这是一个非常好的建议。谢谢。 – dragon

+0

不客气! –