这是我的情况:我正在Django和Mysql中构建一个类似广告的应用程序。我正在使用灵活广告方法:
包含广告类别的表格(家庭,家具,汽车等几个类别)
包含广告类别详情的表格(主页:区域,平方米。汽车:座位,颜色。)
广告表(我在卖房子。我在卖汽车。)
我打算整理广告细节的表格(主页:A区,500平方米。汽车:5个座位,红色。)
这可能吗?我是否可以获得所有广告的详细信息表,即使详细信息包括数字,文本,布尔值等?或者我是否必须将它们全部保存为文本,然后通过代码相应地解释它们?请表达您的意见。谢谢。
答案 0 :(得分:3)
关系数据库不支持OODB这样的用户定义数据类型。我建议您将详细信息列分隔为其他几列,因为您将提高性能以及未来的可用性和可伸缩性。
答案 1 :(得分:0)
考虑为每种广告类型设置一个表格。这是用于对您描述的数据进行建模的旧式RDBMS方法。这意味着每次添加广告类型时都必须向数据库添加一个表格。我想你会发现这并不像听起来那么糟糕。这种方法的好处是减少为数据管理编写的代码和/或更好地使用对象/关系映射库(免责声明:我从未使用过Django,所以你的里程可能会有所不同,但这绝对适用于其他工具)
答案 2 :(得分:0)
这有点像黑客攻击,但是您可以在mysql的text
列中存储您不关心索引的任何类型的信息。如果你不关心可读的信息,你可以使用pickle,或者(更好)jsonpickle,这是人类可读的并且易于使用jsonpickle.encode和jsonpickle.decode访问。我们在我的工作中这样做,并且它在游泳中起作用。
答案 3 :(得分:0)
这些表看起来非常像键值对......在关系数据库设计中,这是一个很大的禁忌,你想要做Ben推荐的。
然而,我已经看到很多网络CMMS在其表结构中使用这种排列。 几乎就像他们希望表格的结构一样。 如果Django希望你以这种方式解决问题,你可能必须这样做。在这种情况下,关于列中/列外的酸洗数据或使用BLOB列的其他注释效果很好。
然而,如果Django以这种方式预期表格,坦率地说,Django设计者并不知道如何正确或有效地使用关系数据库,他们的框架应该使用不同的数据库引擎来操作键值对。如果他们强迫用户/程序员进入这样的情况,这是一个糟糕的设计。