0

我正在用 php 和 SQL 做一个小项目,以便让我的脚湿透数据库。我没有接受过任何正式的数据库培训,我只是对 SQL 有一定的了解。

我计划跟踪对象表中的对象和属性表中的属性。假设有 100 个属性,但将来可能会扩展。这两个表都只需要两列。

天真地,我会在表中记录哪些对象具有哪些属性,其列是属性 ID,行是对象 ID。这些条目将只是布尔值“真/假/空”,具体取决于对象是否已知具有或缺少该属性。每当添加一个新对象时,都需要添加一行及其 100 列。添加新属性时,必须为每个对象添加一列和一行。

但是,我之前读过,如果您担心有多少列,那么您有一个设计问题。一位朋友向我推荐了一张备用桌子。它将包含三列,一个条目将仅包含对象 ID、属性 ID 和相应的布尔值。在这个方案中,添加一个新对象需要向该表添加 100 个新行。

有人可以澄清这两种设计中哪一种更好,为什么?由于某种原因,拥有很多列是否比拥有很多行更成问题?

如果这是一个重复的问题,我完全不会感到惊讶,在这种情况下,我感谢您帮助我指出正确的问题。谢谢!

4

2 回答 2

2

这似乎是一种Many-to-Many关系,因为一个对象可以有许多属性,同时属性属于许多对象。(对吗?我希望如此)我建议的数据库架构是

表对象

  • 对象 ID (PK)
  • 对象名(唯一)

表属性

  • 属性 ID (PK)
  • 属性名称(唯一)

Table Object_Property(这是一个映射表)

  • 对象 ID (FK)
  • 物业 ID (FK)

示例记录和查询,

于 2013-02-03T16:09:30.977 回答
0

开始时,我建议您创建尽可能多的表,因为您拥有不同类型的对象,并且您继续将每个不同对象的特定属性作为列放在表中。如果你正在构建一个复杂的关系数据库,其中一些属性会被拉到其他表中,但如果它是简单的,那么它应该没有问题。

当您仅根据对象和属性来描述域时,很难理解您在做什么 - 本质上,使用您的数据库,您正在创建您所代表的域的逻辑视图。

例如,在一个简单的 Orders 数据库中,您可能有客户、产品和订单表。客户的属性 - 例如姓名、地址和电话可能是客户表中的列。但是,您可能会发现将地址拆分到单独的表中更容易,因为您可能有一个客户使用与他们的帐单地址和送货地址相同的地址。

我发现用更具体的术语讨论设计更容易。在您掌握了基础知识并可以创建一个正常运行的系统之后,我会担心完善或优化您的数据库。

查看亚马逊上的实用程序员

于 2013-02-03T16:21:49.110 回答