Sql 基础数据库设计
我正在用php和SQL做一个小的辅助项目,以便熟悉数据库。我没有接受过任何数据库方面的正式培训,我只是掌握了SQL的工作知识 我计划跟踪对象表中的对象和属性表中的属性。假设有100处房产,但将来可能会扩大。这两个表只需要两列 天真地说,我会在一个表中记录哪些对象具有哪些属性,该表的列是属性ID,行是对象ID。根据对象是否具有或缺少属性,条目将只是布尔值“true/false/null”。每当添加新对象时,都需要添加一行及其100列。添加新特性时,必须为每个对象添加一列和一行 然而,我以前读过,如果你担心有多少列,你就有一个设计问题。一位朋友向我推荐了另一张桌子。它有三列,一个条目只包含对象ID、属性ID和相应的布尔值。在这个方案中,添加一个新对象需要向这个表中添加100个新行 有人能澄清两种设计中哪一种更好,为什么?出于某种原因,有很多列比有很多行更成问题吗Sql 基础数据库设计,sql,database,Sql,Database,我正在用php和SQL做一个小的辅助项目,以便熟悉数据库。我没有接受过任何数据库方面的正式培训,我只是掌握了SQL的工作知识 我计划跟踪对象表中的对象和属性表中的属性。假设有100处房产,但将来可能会扩大。这两个表只需要两列 天真地说,我会在一个表中记录哪些对象具有哪些属性,该表的列是属性ID,行是对象ID。根据对象是否具有或缺少属性,条目将只是布尔值“true/false/null”。每当添加新对象时,都需要添加一行及其100列。添加新特性时,必须为每个对象添加一列和一行 然而,我以前读过,如
如果这是一个重复的问题,我完全不会感到惊讶,我感谢你为我指出正确的问题,在这种情况下。谢谢 这似乎是一种
多对多
关系,因为一个对象可以有多个属性,同时属性属于多个对象。(对吗?我希望如此)我建议的数据库模式是
表对象
- 目标(PK)
- 对象名称(唯一)
- 属性ID(主键)
- PropertyName(唯一)
- ObjectID(FK)
- 房地产ID(FK)
在亚马逊上查看。100列?我不明白你为什么需要这么多专栏。SQL的实用知识对数据库设计没有帮助。查看并@njk我不希望使用那么多,我只是说从初学者的角度来看,$n\times m$网格是在$n$对象上记录$m$属性状态的最简单方法。我意识到以不同的方式存储可能更好。是的,多对多。还感谢您提供有关如何选择钥匙的信息!这是非常有用的…只是一个简单的问题:您提议的Object_属性表如何保存所涉及的每一对的真/假/空记录?当给定ObjectID时,我将让查询返回所有属性的状态,其中许多属性可能是未知的。它会是该表中的第三列吗?如果是这样,听起来你是在为我在OP.Wjy中提到的第二种方法担保。你想为状态添加一个thrr列吗?您可以通过查询轻松地检查状态,您看过小提琴上的演示吗?请看最后一个查询。啊,对不起,我还没有试过这个链接。这是一个简洁的小工具:)据我所知,它看起来像每个对象,你可以指出它有一个属性,或者你可以把它留空。但实际上,我认为我需要保持所有三种可能的状态:is-a、is-not-a和unknown。随着信息的收集,未知数将逐渐转化为is-a或is-not-a。可能有一些未知的东西是没有人知道如何填写的。你能回答我的问题“与很多行相比,有很多列是不好的吗?”?从我读到的内容来看,似乎没有人希望有很多列,但数千行就可以了。是真的吗?对不起。。。因为我没有计划在SQL项目之外再安排时间,所以我不可能太深入。我也无法想象如何为每个对象获取一批表,然后查询它们以查看哪些对象具有特定属性。(也许这是可能的,但我确实不知道怎么做:))看起来我想把它们关联到一个表中,然后查询它。