小编neu*_*tik的帖子

良好的数据库设计,可变数量的属性

我正在尝试创建一个包含设备列表的数据库.所有设备都具有某些共同属性(例如制造商,型号#,序列号等),然后还有其他特定于某个设备的属性(即,调制解调器将具有访问权限#,而太阳能电池板将具有输出容量).我不确定如何用良好的数据库设计原则来表示这些不断变化的属性,我尝试过在网上搜索,但我并不完全确定要搜索什么.

我想出了以下可能的解决方案以及我对它们的初步想法:

  1. 有一个包含每个可能属性的大表,只需将null放在不适用的地方.显然这有一些缺陷.

  2. 为每种设备类型单独设置一个表.这似乎可能是一个噩梦,如果我想打印所有设备的列表,我怎么知道要查找哪些表?

  3. 有一个包含公共属性的表,以及使用外键访问的每个设备类型的其他表来存储额外的属性.我可能会做这个工作,但它会很麻烦,只是感觉不是一个很好的解决方案.

  4. 实体 - 属性 - 值类型模型.只是看起来不太适合我想做的事情.

我没有很多数据库的经验,所以我在学习这里,任何与此问题相关的链接或"必读"数据库设计的文章都将受到赞赏.谢谢!

编辑:首先,我发现我需要谷歌"继承映射",这可能会帮助其他有类似问题的人.为了解决这个问题,我最终使用了#2和#3的混合体.它实际上非常简单,运行良好,并且解决了在没有EAV复杂性的情况下添加额外设备类型的问题.感谢所有的意见和建议!

mysql database database-design

11
推荐指数
1
解决办法
6148
查看次数

MySQL选择索引列

我是 MySQL 的新手,有几个问题我找不到任何信息。这是我想要做的:

我有一个包含 5 列的数据库:id、c1、c2、c3、c4 id 是主键每行在 c1、c2、c3、c4 中都是唯一的(如果你们使用了术语,请告诉我:) )

我需要能够搜索表中的现有行,所以我想在 c1 上放置一个 INDEX,这会将行数从 10,000(最多 100,000)减少到一对。我的问题是:

  1. 在索引的性能优势变得“值得”之前,您估计有多少行?棒球场/轶事答案很好。

  2. 我需要任何特殊的语法来告诉 MySQL 使用 INDEX 吗?现在我正在做一个“SELECT id FROM table WHERE c1='blah' AND c2='blah' AND c3='blah' AND c4='blah'”,我不确定 INDEX 是否有助于查询全部。

  3. 欢迎提出任何其他更好的查询表格方法的建议,请记住,我是新手!!:)

提前致谢!

mysql indexing select

5
推荐指数
1
解决办法
1924
查看次数

标签 统计

mysql ×2

database ×1

database-design ×1

indexing ×1

select ×1