【发布时间】: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