完美的数据库设计

时间:2011-04-22 03:43:11

标签: mysql sql

这是我的表架构,

下面是反馈表功能的架构,  请对表格及其字段的长度和命名意义给出好的建议,

请分享您对表架构及其长度和命名约定的建议。

CREATE TABLE `mytest`.`tbl_feedback` (
`feedback_id` INT( 30 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`first_name` VARCHAR( 50 ) NOT NULL ,
`last_name` VARCHAR( 50 ) NOT NULL ,
`email_id` VARCHAR( 150 ) NOT NULL ,
`comment` TEXT NOT NULL ,
`cur_timestamp` VARCHAR( 20 ) NOT NULL ,
`ipaddress` VARCHAR( 20 ) NOT NULL ,
`status` INT( 3 ) NOT NULL DEFAULT '0'
) ENGINE = MYISAM ;

我也在这个帖子中看到varbinary

这里他们说用varbinary而不是varchar,我们为什么要去varbinary,有什么好处

3 个答案:

答案 0 :(得分:1)

尝试在可变长度字段之前放置固定长度字段(例如“status”)。这对逻辑没有任何影响,但访问这些字段时程序应该运行得稍快一些。

答案 1 :(得分:1)

以下是一些观察结果:

  • 表名“tbl_feedback” - 这是个人偏好,但我会删除“tbl_”前缀 - 我从未遇到过这样的情况:我发现在数据库对象上有前缀很有用。

  • email_id - 我会取消“_id”后缀。 ID是键列(主键或外键)的常用命名约定,您似乎也在使用该约定。在你的情况下,看起来email_id似乎不是外键,所以只需“电子邮件”就可以了。

  • cur_timestamp - 像“created_date”或“updated_date”这样的名称可能会更有意义。使用cur_timestamp,它不是很清楚列的用途,或者当你更新记录时你应该更新它...等等。另外,对于这个列,使用内置类型可能是有用的可以代表日期,而不是varchar。

  • ipaddress - 只是一个挑剔,但根据你的命名约定,如果这是“ip_address”可能会更好。此外,您可能希望将此列设置为至少40个字符或更大,因此您可以存储IPv6地址(使用通用表示法)。

  • status - 此列是否指向另一个“状态”表?如果是这样,这应该是名为“status_id”的外键吗?

答案 2 :(得分:0)

有些字段看起来可以归一化..比如状态为外键约束,状态表,以及人们作为单独的表,其中personid为FK。然后你可以做很酷的事情,比如查找所有人的反馈,或者删除所有人,等等。