2

我正在为我的第一个项目在我的数据库中设置表。(令人兴奋!)

我很难决定我需要建立什么样的关系。

我计划了以下基本表格。

products
-----
id
product_name
product_details
product_url
product_img
category_id
business_id


categories
-----
id
category_name
category_description
category_slug


businesses
----------------
id
business_name
business_phone
business_address
business_city
state_id
business_zip

state
-----
id
state_name

我被困的地方是决定建立什么样的关系。

每个产品只能属于1个类别,并且只能属于1个业务

至于商务表,我想知道将城市邮政编码分解成单独的表是否更好。

我希望能够按类别城市检索产品,例如:“los angeles”中的“shoes”,或者只是“shoes”或“los angeles”中的所有产品

任何人都可以提供一些见解或分享他们的经验。由于我正准备设置我的表,我宁愿现在解决这些场景,然后在开发过程中进行一半。

4

2 回答 2

3

你的设计还可以——很干净。我在任何地方都看不到多对多 - 它似乎是一个直接的层次结构。

此外,你的思维过程似乎很清晰——不断问自己这些问题,你会没事的。

不过,我有以下建议:

首先,始终以单数形式命名您的表格,business而不是businesses.

其次,尽量避免将表名作为列名的前缀,所以name,不是business_name- 当您在查询中引用它时,无论如何都很明显:(business.name额外business_的 inbusiness.business_name是多余的)

另外,因为 zip 是在一个城市,而 city 是在一个州,所以在业务上存储 city 和 state 是多余的数据,所以你可能应该这样做:

business
----------------
id
name
phone
address
zip_code_id

zip_code
--------
id
city_id
name

city
----
id
state_id
name

state
-----
id
name

要回答您的查询问题,您可以使用此架构获得所需的内容。除非您真的遇到麻烦,否则我不会在这里发布它,但它们是非常简单的查询,所以我将把它留给您解决。

于 2011-07-30T02:02:47.820 回答
-1

你应该权衡利弊。

对于多对多关系,如果您进行规范化,那么您最终会得到更多表并且需要更多连接。如果您必须非常定期地检索这些记录,则连接将非常昂贵并增加大量开销。

如果您决定将事物放入一个大表中,那么您将增加数据冗余,这会浪费存储空间,但如果由于更好的索引使用且没有连接而始终查询列的组合,则这是值得的。然而,它增加了应用程序开发的复杂性。当您由于非规范化而在不同的表中具有相同的列并且最终不得不记住更新两个表时尤其如此,如果您忘记更新其中一个表,这会增加数据不一致的风险。

综上所述

因此,这实际上取决于您的情况,如果性能是关键并且您不介意增加的复杂性和可能的​​数据完整性问题,那么请采用非规范化方法。

但是,如果性能不是一个大问题(行数不多,用户数不多,硬件足够多,速度无关紧要),那么分离关系表会减少存储空间(这些天没有意义,因为它太便宜了),提高数据完整性,减少数据不一致并降低开发复杂性

于 2011-07-30T02:01:44.370 回答