我正在用php和SQL做一个小的副项目,让我的脚接触数据库。我没有接受过任何正式的数据库培训,我只是掌握了一些SQL的应用知识。
我计划在对象表中跟踪对象,在属性表中跟踪属性。假设有100个属性,但在未来可能会扩大。这两个表都只需要两列。
简单地说,我会在一个表中记录哪些对象具有哪些属性,该表的列是属性ids,行是对象IDS。这些条目将仅仅是布尔值"true/false/null“,这取决于对象是否具有该属性。每当添加新对象时,都需要添加包含100列的一行。添加新特性时,必须添加一列,每个对象对应一行。
然而,我以前读过,如果你担心有多少列,你就有一个设计问题。一位朋友向我推荐了另一张桌子。它将有三列,一个条目将仅由对象ID、属性ID和相应的布尔值组成。在此方案中,添加新对象需要向该表中添加100个新行。
谁能澄清一下这两种设计中哪一种更好?为什么?由于某种原因,有很多列比有很多行更有问题吗?
如果这是一个重复的问题,我完全不会感到惊讶,在这种情况下,我感谢您的帮助为我指出了正确的问题。谢谢!
发布于 2013-02-04 00:09:31
这似乎是一种Many-to-Many关系,因为一个对象可以有多个属性,同时属性属于多个对象。(对吗?我希望如此)我建议的数据库模式是
表对象
(Unique)
表属性
(Unique)
表Object_Property (这是一个映射表)
示例记录和查询,
发布于 2013-02-04 00:21:49
首先,我建议您创建与不同类型的对象一样多的表,并将每个不同对象的特定属性作为一列放入表中。如果您正在构建一个复杂的关系数据库,这些属性中的一些属性将被提取到其他表中,但是如果它很简单,那么它应该不是问题。
当你只用对象和属性来描述领域时,很难理解你在做什么--本质上,使用你的数据库,你正在创建一个你所代表的领域的逻辑视图。
例如,在一个简单的orders数据库中,您可能有用于客户、产品和订单的表。与客户类似的姓名、地址和电话的属性可能是customer表中的列。但是,您可能会发现将地址分解到一个单独的表中会更容易,因为您可能会有一个客户使用与他们的帐单地址和发货地址相同的地址。
我发现用更具体的术语来讨论设计更容易。我担心在你有了基础知识并可以创建一个功能正常的系统后,如何完善或优化你的数据库。
在亚马逊上查看The Pragmatic Programmer。
https://stackoverflow.com/questions/14674380
复制相似问题