我正在创建服装店,因此我正在创建画廊功能,其中包括两种类型:产品库和lookbook库。产品库只是单一产品的图片,而lookbook画廊是包含多种产品的图片。
到目前为止,我有一个简化的UML图,有点像这样
我不确定如何将其转换为MySQL表格。我试过了,我想出了类似的东西
但这对我来说似乎有点过分和闻起来很有趣。在我的情况下,最佳做法是什么?我是在正确的轨道还是我错了?
答案 0 :(得分:2)
首先考虑继承是否是实现所需行为的最佳方式。通常最好prefer composition over inheritance。从你的图表中我会说你根本不需要继承来解决你的问题。
如果确实需要实现继承,那么可以使用许多策略。寻找对象关系映射器是一个非常好的主意,因为一个好的人可以更容易地实现下面的策略。如果你使用.NET,那么NHibernate或Entity Framework是不错的选择。对于Java Hibernate非常好。
每个类层次结构的表
在这里,您将为整个类层次结构创建一个表。这最有意义 当层次结构中的类都共享许多列时。您需要添加“discriminator”列,以便您可以识别每行属于哪个子类。在你的例子中你有
我认为这个策略对你来说最有意义,因为你的子类之间似乎没有很多不同的列。
每个子类的表
在此示例中,您将为每个子类创建一个表。当继承层次结构中的类不共享许多公共列时,这是最有意义的。
所以你有这样的表:
每个班级的表格
这是图表中的策略。像table per-subclass一样,当每个子类具有不同的列时,这很有用。每个子类表的优点是在一个大连接中查询整个类层次结构更容易,缺点是最终会有很多表。
答案 1 :(得分:1)
我不知道“最佳实践”是什么,你可以使用NO-SQL数据库,或者如果你使用关系数据库,你可以使用3个表,画廊,图片和产品。
图库可以包含许多图片
图片可以包含许多产品。
画廊类型之间的区别仅包含在属性中。
答案 2 :(得分:0)
该数据库架构看起来注定要失败。定义模式时最重要的事情是从问题的名词和动词开始。用语言描述您的环境是什么样的。有哪些实体?实体如何相互作用?例如,“画廊有图片”。仅此声明就告诉您画廊和图片之间存在关联。
一旦你想出了你的名词 - 动词关联,你就可以开始说明诸如“画廊”和“图片”之类的实体。画廊和图片之间是否有一对一的关系,或者有多个图片库?
请考虑这些事情,并在此处查看一些基本设计提示:http://msdn.microsoft.com/en-us/library/b42dwsa3(v=vs.71).aspx