2010-10-01 75 views
0

請問我對這個MySQL表結構有什麼意見嗎?
varchar字段的數量不好?有更好的選擇嗎?MySQL表結構

數據的種類應該是不言自明的。

CREATE TABLE `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `active` bit(1) NOT NULL DEFAULT b'1', 
    `email` varchar(64) NOT NULL, 
    `password` char(128) NOT NULL, 
    `forename` varchar(32) NOT NULL, 
    `surname` varchar(32) NOT NULL, 
    `ip` int(10) unsigned NOT NULL, 
    `address` varchar(32) NOT NULL, 
    `address_2` varchar(32) DEFAULT NULL, 
    `city` varchar(32) NOT NULL, 
    `county` varchar(32) NOT NULL, 
    `postcode` varchar(16) NOT NULL, 
    `country` char(2) NOT NULL, 
    `country_other` varchar(16) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `email` (`email`), 
    KEY `password` (`password`) 
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

謝謝!

+0

人們有可能有多個地址嗎?您可能想要考慮更正常化一點,並將地址分成單獨的表格。就varchar字段的數量而言,它們沒有任何問題。我不確定你的IP字段爲什麼是Int。可能想使它成爲varchar(15) – Sage 2010-10-01 16:21:47

+1

@Sage - 我打算使用INET_ATON()函數存儲IP,因此是無符號整數。不,不可能有多個地址。 – chigley 2010-10-01 16:24:06

+0

啊,很酷。我以前沒有看到過這個功能。學到的東西! – Sage 2010-10-01 16:27:00

回答

1

您可以嘗試在地址字段的varchar中使用text,也可能是電子郵件地址。我已經閱讀了關於varchar字段中符號(@)的一些問題。有了text,就我所知,您不必定義大小。

+1

使用文本列可能會導致其他問題。我知道在SQL Server中,文本列數據存儲在行外。 – Sage 2010-10-01 16:23:06

+0

感謝您的領導! – mastofact 2010-10-01 16:29:43