【问题标题】:Database design advice for mobile phones with variations多变手机的数据库设计建议
【发布时间】:2013-05-30 19:37:48
【问题描述】:

我正在构建一个迷你网站,允许人们按名称和型号搜索小工具(手机、平板电脑等),我遇到的问题是,当您考虑到名称约定时,如何最好地设置数据库一些手机。

例如,三星 Galaxy S 手机有很多变体,型号为 GT-I9000。 例如三星 Galaxy S GT-I9000(以下变体)

  • 三星 Captivate
  • 三星活力
  • 三星着迷
  • 三星 Epic 4G
  • 三星催眠

谁能就我设计这些表的最佳方式提供一些建议 - 基本上这个项目最终将拥有一个相当大的数据库,所以我正在尝试相应地计划它。

我希望能够设置数据库以使用户能够搜索“Captivate”或“Vibrant”,这将向他们显示 Galaxy S GT-I9000,因为这是设备的“主要”名称。

我目前有以下数据库表

brands - id, brand (eg 2, Samsung)
devices - id, brand_id, device_type_id, name (eg 1, 2, 3, Galaxy S)
device_types - id, type (eg 3, phone)

任何建议将不胜感激。如果需要更多信息来了解我想要实现的目标,请告诉我,我将使用 MySQL 作为数据库。

【问题讨论】:

  • 虽然很容易想出各种描述数据的模式,但在确定哪种模式最好时,我们确实需要知道您希望用户如何与数据交互。一个非常灵活的模式将使搜索特定电话变得容易 - 但更难以识别电话的跨类别,例如搜索支持 GPS 的手机。
  • 实际搜索仅限于名称和型号。例如,用户会搜索“Galaxy S”或“i9000”或“Vibrant”。稍后我将针对 GPS 等属性进行一些额外的映射,但用户无需了解 GPS 等详细信息,因为它纯粹用于用户“查找”他们的手机,无论它是否使用变体名称.
  • 我决定添加另一个名为“device_variants”的表,这将包含 Galaxy S 的变体,例如“Vibrant”、“Captivate”等...你说这是最好的吗?怎么做?我很快就会做一个架构。
  • 也许可变长度层次结构更合适。
  • @symcbean 您能否进一步解释一下您所说的“可变长度层次结构”是什么意思,我很想听听您的想法 - 再次感谢

标签: mysql database-design relational-database normalization database-normalization


【解决方案1】:

诉讼支持系统在人员方面一直遇到这个问题。通常的方法是建立一个别名表。最简单的结构是只有两列的表格。

create table device_aliases (
  device_id integer not null,
  device_alias varchar(20) not null,
  primary key (device_id, device_alias),
  foreign key (device_id) references devices (id)
);

【讨论】:

  • 这是我最后用的方法
猜你喜欢
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 2011-08-05
  • 2014-10-22
相关资源
最近更新 更多