MySQL数据类型?

时间:2010-09-01 21:33:53

标签: php mysql content-management-system types phpmyadmin

我正在为MySQL和PHP设计一个基本CMS的数据库。 CMS将有一个前端,允许排序和搜索。后端将允许授权用户上传文件。

我正在使用PHPMyAdmin,我想帮助设置我的数据库。

我愿意回答各种MySQL数据类型以及它们的优点。请使用常见的数据库字段作为示例。

下面列出了我想要的内容。缺少什么以及我需要使用哪些数据类型?

  

资源(对于我的文件)

     
      
  • 的file_id
  •   
  • filename(文件预先排序,显示名称和路径   从这里。)
  •   
  • file_type(PDF | AUDIO | VIDEO | PHOTO [也用于生成文件   网址])
  •   
  • 上传日期(PHP或MySQL中的时间戳)
  •   
  • uploaded_by(来自用户表的用户ID)
  •   
  • event(来自Events表的event_id,可选)
  •   
     

用户(用户帐户 - 管理员权限和通知列表)

     
      
  • USER_ID
  •   
  • 如first_name
  •   
  • 姓氏
  •   
  • 电子邮件
  •   
  • 密码
  •   
  • phone_number(可选)
  •   
  • permissions_level(只读,上传)
  •   
  • CREATION_DATE
  •   
     

活动

     
      
  • event_id的
  •   
  • EVENT_NAME
  •   
  • event_location
  •   
  • EVENT_DATE
  •   
  • EVENT_DESCRIPTION
  •   
  • ENTRY_DATE
  •   

3 个答案:

答案 0 :(得分:2)

我会采取什么:

资源(对于我的文件)

  • file_id INT(或SMALLINT,取决于预期条目的数量)
  • filename VARCHAR(或文本,如果超过255个字符)
  • file_type ENUM(如果只是你提到的那些,或者如果可以添加动态类型,则为VARCHAR)
  • 上传DATE DATETIME(或DATE,如果您不需要时间)
  • uploaded_by INT(或SMALLINT,但与用户表中的相同)
  • 事件INT(或SMALLINT,但与事件表中的相同)

用户(用户帐户 - 管理员权限和通知列表)

  • user_id INT(或SMALLINT,取决于预期条目的数量)
  • first_name VARCHAR
  • last_name VARCHAR
  • 电子邮件VARCHAR
  • 密码CHAR(40)(对于SHA1哈希)
  • phone_number VARCHAR(因为它可能包含类似 - ,/或+)
  • permissions_level TINYINT(如果只是数字值,最多127个值)
  • creation_DATE DATETIME(如果您不需要时间,则为DATE)

<强>事件

  • event_id INT(或SMALLINT,取决于预期条目的数量)
  • event_name VARCHAR
  • event_location VARCHAR
  • event_DATE DATETIME(如果您不需要时间,则为DATE)
  • event_description TEXT(作为VARCHAR的255可能是简短的)
  • entry_DATE DATETIME(如果您不需要时间,则为DATE)

当你设置了数据库并输入了一些虚拟数据时,你可以通过phpmyadmin运行一个简单的语句来告诉你,MySQL将采用什么样的虚拟数据:

SELECT * FROM events PROCEDURE ANALYSE()

Optimal_fieldtype列中,您将找到MySQL告诉您的内容。但是你不应该采用那种确切的字段类型。它会经常告诉你一个ENUM,但是大多数时候你会添加随机数据,所以你必须在这种情况下使用VARCHAR,Max_length列会给你一个提示它应该有多长时间的提示。但是在所有VARCHAR字段上,您应该添加额外的空间,具体取决于您期望值的长度。考虑到即使名字也可能超过50个字符。

答案 1 :(得分:1)

您的用户表没有密码哈希列。不确定你是否打算让它有这样或那样。我无法看到我们如何回答应该使用哪种数据类型,因为它完全取决于您计划如何使用列。对于日期,我更喜欢日期时间而不是时间戳,但这仅仅是个人偏好,因为我喜欢在查询中手动插入日期。

答案 2 :(得分:0)

缺少什么,这有点让你决定/需要什么。您应该阅读设计数据库。

至于你拥有的数据类型

  • ID字段应为INTBIGINT(取决于您的应用程序的大小)并设置为PRIMARY KEY

  • 名称应为varchar您需要多长时间取决于您的要求。大多数第一/列表名称一般最多为25-30个字符。根据您的要求,活动名称可能会超过250个。

  • 根据您的要求,该位置与VARCHAR的名称类似,大约在50-150之间。

  • 日期应为DATETIME字段。

  • 说明应为VARCHAR(250)TEXT字段。

  • 权限实际上取决于您希望如何处理它。这可以是INTVARCHAR(如果您要序列化数组)。

  • 电话号码可以是INT(如果您想要删除所有非数字字符并按照自己的方式格式化)或VARCHAR(15)如果您不想删除字符

  • 电子邮件应为VARCHAR(250)

希望这会有所帮助,这又取决于您对应用程序的要求以及您所设想的内容。但是随着需求的变化,始终可以更改初始类型。

修改

如果您想了解有关不同MySQL数据类型的完整信息,请阅读手册:http://dev.mysql.com/doc/refman/5.0/en/data-types.html