数据库设计 – 不同表的多个“联系信息”

前端之家收集整理的这篇文章主要介绍了数据库设计 – 不同表的多个“联系信息”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含表“人”,“公司”,“商店”等的数据库.这些表中的许多表必须具有“联系信息”.在 Database design – Similar Contact Information for multiple entities中提出了设计这种可能性的可能性
现在,在我的数据库中,我可以为每个联系人数据提供多个地址,多个电话和多个电子邮件.这是我的数据库架构:

因此,我将中间表“联系”作为将“联系信息”链接到每个表的最简单方法.
我的问题:做这个并且只有一行的表是一个好习惯吗?

解决方法

这就是我设计数据库的方式:
  1. address_types
  2. id unsigned int(P)
  3. description varchar(10) // Mailing,Physical,etc.
  4.  
  5. addresses
  6. id unsigned int(P)
  7. line1 varchar(50) // 123 Main Street,etc.
  8. line2 varchar(50) // Default NULL
  9. city_id unsigned int(F cities.id)
  10. zip varchar(6) // 12345,A1A 1A1,etc.
  11. zip4 char(4) // Default NULL
  12. lat decimal(10,8) // 13.12345678,etc.
  13. lon decimal(11,8) // 110.12345678,etc.
  14.  
  15. cities
  16. id unsigned int(P)
  17. state_id unsigned int(F states.id)
  18. name varchar(50) // Omaha,Detroit,Tampa,etc.
  19.  
  20. companies
  21. id unsigned int(P)
  22. name varchar(75) // IBM,Microsoft,RedHat,etc.
  23. ...
  24.  
  25. companies_addresses
  26. id unsigned int(P)
  27. company_id unsigned int(F companies.id)
  28. address_id unsigned int(F addresses.id)
  29. address_type_id unsigned int(F address_types.id)
  30.  
  31. companies_contacts
  32. id unsigned int(P)
  33. company_id unsigned int(F companies.id)
  34. contact_id unsigned int(F contacts.id)
  35. contact_type_id unsigned int(F contact_types.id)
  36.  
  37. companies_emails
  38. id unsigned int(P)
  39. company_id unsigned int(F companies.id)
  40. email_id unsigned int(F emails.id)
  41. email_type_id unsigned int(F email_types.id)
  42.  
  43. contact_types
  44. id unsigned int(P)
  45. description varchar(10) // Home phone,Mobile phone,FAX,etc.

在北美,电话号码如下所示:CC-AAA-EEE-SSSS-XXXXXXX,其中CC是国家代码,AAA是区号,EEE是交换机,SSSS是站,XXXXX是分机.

  1. contacts
  2. id unsigned int(P)
  3. country_code varchar(3)
  4. area_code varchar(3)
  5. exchange varchar(3)
  6. station varchar(4)
  7. extension varchar(10) // Default NULL

ISO 3166-1.

  1. countries
  2. id char(2) // ca,mx,us,etc.
  3. iso3 char(3) // can,mex,usa,etc.
  4. iso_num char(3)
  5. name varchar(44) // Canada,Mexico,United States,etc.
  6.  
  7. email_types
  8. id unsigned int(P)
  9. description varchar(10) // Personal,Work,etc.
  10.  
  11. emails
  12. id unsigned int(P)
  13. address varchar(255) // support@ibm.com,etc.
  14.  
  15. shops
  16. id unsigned int(P)
  17. name varchar(45) // Shop A,Shop B,etc.
  18. ...
  19.  
  20. shops_addresses
  21. id unsigned int(P)
  22. shop_id unsigned int(F shops.id)
  23. address_id unsigned int(F addresses.id)
  24. address_type_id unsigned int(F address_types.id)
  25.  
  26. shops_contacts
  27. id unsigned int(P)
  28. shop_id unsigned int(F shops.id)
  29. contact_id unsigned int(F contacts.id)
  30. contact_type_id unsigned int(F contact_types.id)
  31.  
  32. shops_emails
  33. id unsigned int(P)
  34. shop_id unsigned int(F shops.id)
  35. email_id unsigned int(F emails.id)
  36. email_type_id unsigned int(F email_types.id)

ISO 3166-2.

  1. states
  2. id unsigned int(P)
  3. country_id char(2)(F countries.id)
  4. code varchar(2) // AL,NF,NL,etc.
  5. name varchar(50) // Alabama,Newfoundland,Nuevo León,etc.

猜你在找的MsSQL相关文章