7

我正在开发一个项目。它主要是为了学习的目的,我发现实际上尝试一个复杂的项目是掌握基础知识后学习一门语言的最好方法。数据库设计不是一个强项,我开始阅读它,但它的早期和即时通讯仍在学习。涉及动态字段的数据库结构

这里是我的阿尔法模式,我真的在这里我只是想记下所有我能想到的,看是否任何问题,跳出点。 http://diagrams.seaquail.net/Diagram.aspx?ID=10094#

我的一些顾虑我想反馈:

为核心

通知属性,如区域例子,可以说为了简单的领域是厨房,卧室,花园,卫生间和起居室。对于另一个可能成为主页,联系页面,about_us,启动画面的客户。它可以是2个区域,也可以是100个,不需要限制它。

我为默认创建了单独的表格,每个表格都链接到一个错误。后来我遇到了自定义字段的问题,如果有人想要标记该错误适用于哪些主题,我们可能不会有这种情况,那么可能还有其他100个东西,所以我想坚持一组核心属性和自定义字段给人灵活性。

但是当我到了自定义字段我知道我有一个问题,我不能要创建一个表,每一个自定义字段,所以我代替2个表。自定义字段和custom_field_values。这个想法是包括默认每场将被存储在该表中,并且每个将被链接到值表,只会有这样的事情

custom_fields table 
id   project_id  name 
01   1     area(default) 
12   2     rooms(custom) 
13   4     website(custom) 

custom_field_values table 
id   area   project_id sort_number 
667   area1   1    1 
668   area2   1    2 
669   area3   1    3 
670   area4   1    4 
671   bedroom  2    1 
672   bathroom  2    2 
673   garden   2    3 
674   livingroom  2    4 
675   homepage  4    1 
676   about_us  4    2 
677   contact  4    3 
678   splash page 4    4 

这看起来像一个有效的方式来处理动态字段这样或还有其他的选择吗?

默认值将被硬编码,所以你可以使用它们或换成你自己或者我可以创造一个又一个表,允许用户编辑这将被链接到他们的项目的默认名称。任何反馈都是值得欢迎的,如果计划中存在的问题非常明显,请随时批评。

+0

唉EAV。如果我是你,我会看看NoSql的选择。 –

回答

16

您已改造老反模式称为Entity-Attribute-Value。表中定制字段的概念在逻辑上与关系数据库在逻辑上是不兼容的。 A relation具有固定数量的字段。

但是,即使它是不正常的关系,我们仍然需要有时这样做。

有几个方法来模拟SQL自定义字段,但其中大多数是打破规范化的规则。对于一些示例,请参阅:

+0

谢谢比尔,你会推荐一本书或资源,用例子解释我如何将我的设计转换为合并类继承,我不完全理解它到底是什么或者如何使用MySQL实现它,但是现在我开始阅读它,因为你建议作为我链接到的其中一个帖子的首选选项,如果有一个在线资源或书籍来解释这个新手,那么我会高兴地购买它,到目前为止,我正努力寻找好的解释或例子。 – user1547410

+0

Martin Fowler的[企业应用程序体系结构](http://www.martinfowler.com/books/eaa.html)是类继承的最佳书籍,以及许多其他应该了解的模式。 –

+0

谢谢,它看起来似乎越看越我的结构更适合一个Nosql数据库,我以前没用过它,但似乎更合乎逻辑的选择,任何人都不同意? – user1547410