假装我是马克·扎克伯格,那是2003年。
我正在建立一个社交网站(thefacebook.com),我需要一个建议。
该网站的重点是用户个人资料,但它也支持企业,大学等的个人资料。我们称这些其他个人资料 - 页面个人资料。
两种类型的配置文件(用户配置文件和页面配置文件)都支持电话号码。
我应该如何将这些电话号码存储在数据库中?
以下设计是否有意义:
phones(phone_id, phone_number);
users_phones(user_id, phone_id, ...);
pages_phones(page_id, phone_id, ...);
你是否建议另类设计?
PS:我相信我对这个Facebook的事情很重要,所以通过参与这个问题你可能会参与建设历史。
答案 0 :(得分:4)
答案 1 :(得分:3)
也许:
users(user_id, phone_number, ...);
pages(page_id, phone_number, ...);
即。你真的关心手机作为一个实体吗?或者电话号码仅仅是用户和页面的有用属性?
对于每个用户和每页的多部手机:
users(user_id, ...);
pages(page_id, ...);
user_phones(user_id, phone_number);
page_phones(page_id, phone_number);
答案 2 :(得分:2)
两种类型的配置文件(用户配置文件 和页面配置文件)支持手机 号。
我应该如何存储这些手机的电话 数据库中的数字?
在个人资料电话号码表中。
答案 3 :(得分:0)
有两个概念在混淆。
(1):即使您有默认实体或主要配置文件,您使用的是几个相似但不完全相同的实体(“配置文件”)。
所有实体的某些属性或字段都相同。某些属性或字段对于每种实体都是不同的。此场景或模式称为“泛化”,通常会被转换为带有其他子表的主共享表:
http://en.wikipedia.org/wiki/Class_diagram#Generalization
profiletypes {profiletype_id,profiletype_name}
个人资料{profile_id,profiletype_id,profiletype_name}
profile_user {profile_id,profiletype_firstname,profiletype_lastname,profiletype_ssn,...}
profile_company {profile_id,profiletype_companyname,...}
profile_rockband {profile_id,profiletype_bandname,...}
(2):你有一个可以重复几次的字段,但仍然有一个默认值。
一般;我在主“配置文件”/“表格”中添加了1或2个“默认”电话号码,并为手机创建了一个附加表格。
个人资料{profile_id,profiletype_id,profiletype_name,profiletype_defaultphonenumber}
手机{phone_id,profile_id,phone_number}