规范化社交网络类型网站的表格

时间:2014-02-06 22:47:45

标签: php mysql sql database database-normalization

我正在尝试构建一个网站,它将收集用户的信息并将其存储到表中。让我们将表命名为 user_details 。它将包含以下列:

ID,国家,城市,姓名,生日,性别,邮箱,密码,PHONE_NUMBER,search_phone_number

id = 1,2,3,4 .. INT AUTO_INCREMENT NOT NULL UNSIGNED PRIMARY KEY phone_number =其唯一但仅在同一个国家/地区。也许来自英国的人与来自西班牙但不在英国的人拥有相同的phone_number。换句话说,它与国家有关。为了使其唯一,search_phone_number将由country + phone_number组成,例如:SPAIN394221234。

用户将使用其唯一的search_phone_number搜索其他用户。

是否需要尝试对此表进行规范化?

同样在同一个网站上,我建立了一个简单的PM系统和一个图库(显示用户上传的图片)。所以我有2个表: 1)消息表(发件人,reiceiver,消息,....) 2)照片表(目录,文件名,...)

同样,是否需要规范化消息和照片表?

我有点困惑,因为在某些情况下,规范化是必须的,但在其他一些情况下则不是。

提前致谢!

1 个答案:

答案 0 :(得分:1)

1 - 创建一个新的国家/地区表格,如...

create table country (id int auto_incremenet primary key, country varchar(100));

2 - 创建一个像...的新城市表

create city (id int auto_increment primary key , city varchar(100), fk_country_id int);

fk_country_id将具有该城市所在国家/地区的ID

3 - 在上面提到的表格中,删除国家/地区和城市列,只添加fk_city_id列。 fk_city_id将具有此人所在城市的ID

4 - 为

等手机创建表格
create table user_phones(id int auto_increment primary key, fk_country_id int, phone_number varchar(15)) ;

5 - 为此表添加唯一索引,如此...

CREATE UNIQUE INDEX idx_country_phone ON user_phones(fk_country_id, phone_number);

从您的表中删除电话号码和search_phone_number,并将fk_user_phones_id列添加到您的表中..它将具有来自user_phones表的相关行的ID值

6 - 当用户进行搜索时,按国家/地区ID和电话号码进行过滤