mysql - 创建mysql数据库并使用规范化

标签 mysql

我在这里没有找到任何与我要查找的内容相近的文章。我读了一些主题,但没有一个主题过多地介绍了数据库和规范化。我从《PHP and MySql for Dynamic Web Sites》一书中了解了规范化。

我举了一个例子,因为我没有教授来纠正我,所以我需要你的帮助来告诉我我是对还是错。

我的示例是一个有 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`)
) ;

最佳答案

看起来不错,但也许你可以做得更好。

  • users 表中,而不是键入 ENUM('member','admin', ' super 管理员') NOT NULL,

添加一个名为 UserType 的新表

  • TypeId(主键)
  • 类型名称

并优化您的用户表 添加

  1. 类型 ID
  2. ManagerID(通过此属性,您可以了解谁是该用户的管理员或 super 管理员)

最后一步 如果您有很多子类别,请将表格分开。如果这样做,您可以向子类别添加不同的属性(也许是短片时间)。

Adding new tables is not a waste as long as it makes design more clear. But if it is enough, adding more tables makes no sense.

关于mysql - 创建mysql数据库并使用规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33876913/

相关文章:

php - 月份分组查询

php - Doctrine2 静静地无法插入数据

mysql - 合并同一数据库的两个版本: duplicate id errors

mysql - 获取 MySQL 中两个日期之间的年差作为整数

mysql - Laravel 查询生成器分组

mysql - 奇怪的消息 sh :line 1 trace xcode-select when running a ruby program

mysql - 如何在 Hibernate、MySQL 应用程序中使用 import.sql 文件将默认数据插入表中

mysql如何自动更新外键

php - Prestashop 向产品功能添加超链接或图像

mysql - 如何连接具有多个条件的多个表