|
1
19
这是另一种变体 Entity-Attribute-Value 设计。 一个更容易识别的EAV表如下:
有些人强迫
您所做的只是将EAV表分布在三个表上,但没有改善元数据的顺序:
如果你打算使用EAV设计,你只需要
但请记住,你是 将数据与元数据混合 。您将失去对数据模型应用某些约束的能力。
SQL数据库不能很好地与此模型配合使用。这很难做到正确,而且查询它变得非常复杂。如果你继续使用SQL,最好按照传统方式对表进行建模,每个属性一列。如果您需要“子类型”,请为每个子类型定义一个从属表( Class-Table Inheritance ),否则使用 Single-Table Inheritance 。如果每个实体的属性变化不受限制,则使用 Serialized LOB . 另一种为这类流体、非关系数据模型设计的技术是语义数据库,它将数据存储在 RDF 并询问 SPARQL 一个免费的解决方案是 RDF4J (原名芝麻街)。 |
|
|
2
3
我需要解决这个确切的问题(相同的通用领域和所有汽车零部件)。我发现这个问题的最佳解决方案是使用Lucene/Xapian/Ferret/Sphinx或您喜欢的任何全文索引器。比SQL提供的性能要好得多。 |
|
|
3
1
你描述的不是标签,标签只是值,它们没有关联的键。 标签通常以字符串列的形式实现,该值是一系列分隔的值。 例如#1,标签字段将包含以下值: “制造商_梅赛德斯,车型_SLK32 AMG,敞篷车_硬顶” 然后,用户通常能够通过一个或多个标签的存在来轻松过滤条目。从数据库的角度来看,它本质上是无模式的数据。标签也有缺点,但它们也避免了使用EAV模型带来的极端复杂性。如果你真的需要一个EAV模型,那么考虑一个包含JSON数据的属性字段也可能是值得的。查询起来更痛苦,但仍然没有跨多个表查询EAV那么可怕。 |
|
|
4
0
我认为你的解决方案是简单地在你的车辆表中添加一个制造商列。这是一个你知道所有车辆都会有的属性(即汽车不会自发出现),通过将其作为车辆表中的一列,你可以解决每辆车只有一个制造商的问题。这种方法适用于所有车辆共享的任何属性。然后,您可以为其他不通用的属性实现标记系统。 因此,从你的例子来看,车辆表类似于: vehicle vid vin make model |
|
|
5
0
一种方法是稍微重新思考你的模式,将标签键从值中规范化:
现在,您只需要对
或者,除了简单的外键之外,还有其他方法可以创建约束:根据您的数据库,您可以编写自定义约束或插入/更新触发器来强制车辆标签的唯一性吗? |
|
|
6
0
我需要解决这个确切的问题(相同的通用领域和所有汽车零部件)。我发现这个问题的最佳解决方案是使用Lucene/Xapian/Ferret/Sphinx或您喜欢的任何全文索引器。比SQL提供的性能要好得多。 如今,我几乎从未构建过一个不涉及全文索引器的数据库支持的web应用程序。这个问题和搜索的一般问题经常出现,无法从工具箱中省略索引器。 |
|
|
Davtho1983 · 在Django中查看ForiegnKey数据 7 年前 |
|
|
N_M · 主键和外键约束在配置单元中如何工作? 7 年前 |
|
|
Melolailo · 将约束与外键一起使用 7 年前 |
|
|
Alfred Balle · Postgresql,对唯一约束的引用 7 年前 |
|
|
yodabar Arkana · 更新|删除外键时的PgSQL默认操作 7 年前 |
|
|
Seba · 如何检查外键以限制软删除? 7 年前 |
|
|
dryhay · MySQL“多对多”关系错误 7 年前 |