黄页网站数据库设计(看看)

Moh*_*ect 5 database-design web

我正在设计一个黄页网站,我刚刚完成了数据库设计,如果可以的话我需要一些关于它的评论。

国家

ID、名称、标志图像、创建日期

城市

国家ID、名称、图像、创建日期

公司类型

id、city_id、名称、图像、描述、创建日期

公司子类型

id、company_type_id、名称、图像、描述、创建日期

公司

id、company_sub_type_id、名称、logo_large、logo_small、描述、成立年份、地点、员工人数、creatDate

company_working_hours(每天不同的开放时间)

id、company_id、Sunday_open、Sunday_close、Monday_open、Monday_close、Tuesday_open、Tuesday_close、Wednesday_open、Wednesday_close、Thursday_open、Thursday_close、Friday_open、Friday_close、Saturday_open、Saturday_close、creatDate

company_branch(公司可以有多个分支机构)

id、company_id、位置、描述、创建日期

Branch_opening_hours(每天不同的营业时间)

id、company_branch_id、Sunday_open、Sunday_close、Monday_open、Monday_close、Tuesday_open、Tuesday_close、Wednesday_open、Wednesday_close、Thursday_open、Thursday_close、Friday_open、Friday_close、Saturday_open、Saturday_close、creatDate

公司电话(公司可以添加多个电话)

id、company_id、phone_type、phone_number、描述、creatDate

公司网站(公司可以添加多个网站)

id、company_id、website_url、描述、创建日期

公司邮箱(公司可添加多个邮箱)

id、company_id、电子邮件、描述、创建日期

公司评论(用户评论)

id、user_id、company_id、文本、创建日期

companyRate(用户可以对公司进行评分)

id、user_id、company_id、rate_flag、创建日期

companyLike(用户可以喜欢该公司)

id、user_id、company_id、like_flag、creatDate

公司付款方式(公司可以选择接受哪种付款方式)

id、company_id、信用卡、支票、pay_pal、现金、借记卡、creatDate

特殊服务(如 Wi-Fi、预订、送货...;我在此表中添加服务并将其与其他表中的公司链接)

ID、服务名称、服务电话号码、创建日期

公司服务

id、SpecialServices_id、company_id、creatDate

公司产品

id、company_id、名称、描述、图像、价格、创建日期

公司相册

id、company_id、名称、描述、cover_image、creatDate

相册图片

id、companyAlbum_id、image_small、image_large、标题、说明、creatDate

图片评论

id、user_id、albumPic_id、消息、creatDate

喜欢图片

id、user_id、albumPic_id、likeFlag、creatDate

我正在考虑为每个国家建立一个不同的数据库,你对此有何看法?提前谢谢:D

Joe*_*own 4

正如迈克·谢里尔 (Mike Sherrill) 指出的那样,鉴于人们必须对模型做出许多假设,我认为该模型总体上看起来相当不错。您可能会给自己带来麻烦的一个地方是开放时间。奇怪的是,您为此创建了一个表,但随后使用了非标准化的列集。我看不出如何使用此列集为每个公司或分支机构拥有多行。无论如何,我认为您需要单独的表,但开放时间的列定义完全不同。

根据业务类型和您所在的位置,每天可能会有多个职位空缺。我可以将餐馆、一些医生以及某些国家的几乎任何企业作为例子。有些地方只在用餐时间开放,而其他地方则在午餐时间关闭等。因此,不应使用非标准化模式(即:Sunday_open、Sunday_close、Monday_open、Monday_close 等),您应该使用如下模式:

Company_Working_Hours
( id,
  company_id,
  day_of_week,
  open_time,
  close_time
)
Run Code Online (Sandbox Code Playgroud)

您也可以对分支使用相同的结构。这允许您说公司每周二的营业时间为 11:00 至 2:00(例如午餐)和 17:00 至 23:00(晚餐)。这种设计使您可以灵活地每天拥有多个空缺职位,并且无需在业务完全关闭的日子里输入空值。

我对你的模式的另一条评论是,你将地理划分为国家和城市。有些国家幅员辽阔,有多个同名城市(例如美国斯普林菲尔德)。您可能想在城市和国家之间插入省/州/地区表。对于没有细分的国家/地区(罕见),您可以在此中间表中包含一个条目。我已经看到这样做是在桌子上有一个标志来指示是显示还是隐藏记录,以防您担心在它只是一个虚拟记录时显示中间层。

至于您关于为每个国家/地区隔离数据库的问题,我不确定您为什么要这样做。除非您希望在不同的服务器上部署不同的国家/地区,每个服务器都会获得自己不同的网络流量,否则我看不到隔离国家/地区的优势。让用户选择国家/地区将是一个很好的功能。如果所有数据都在一起,则更改国家/地区选择将很容易;如果每个国家/地区都有自己的数据库,则更改国家/地区选择会困难得多。