作为关系数据库设计的新手,我试图澄清一条信息来正确设计这个数据库。虽然我使用Filemaker作为平台,但我相信这是一个普遍的问题。
使用理想情况下拥有所有一对多关系的逻辑,并使用单独的表或连接表来解决这些问题。
我有一个包含多个产品类别的多个产品的多个产品的数据库。我还希望这在报告方面尽可能具有可扩展性,能够以尽可能多的方式对数据进行切片和切块,因为用户的需求在不断变化。
所以,当我问这个问题"每个品牌都有多个产品"我得到了肯定,并且"每个产品都有多个品牌"答案是不。所以这是一对多关系,但似乎自联接表可能会给我所需的一切。
对于其他与产品相关的问题,这种方法似乎也陷入了困境。产品类别等信息,每个产品都与一个产品类别相关联,但只有一个产品类别与产品相关。
所以我看到了2种可能性,制作了三个表并用主键和外键加入它们,一个用于品牌,一个用于产品类别,一个用于产品。
或者第二种可能性是在一个表中创建一个具有品牌和产品类别以及产品信息的表(因为它们都是产品相关的)并且只需要自我连接和其他基于查询的表来为我提供未来报告要求将随着时间的推移而变化。
我正在寻找可能使我指向正确方向的经验输入。
提前致谢!
答案 0 :(得分:0)
我不确定你在哪里可以看到自我加入的空间。在我看来,你说:我有一张产品表;每个产品都有一个品牌和一个(?)类别。如果是这种情况,那么你需要三个表:
Brands -< Products >- Categories
或 - 仅在Filemaker中 - 您可以使用值列表替换品牌和类别表中的一个或两个(假设您不会重命名品牌/类别并以牺牲一些报告功能为代价)。所以真的取决于你最终希望得到什么类型的信息。
答案 1 :(得分:0)
您是否希望存储有关品牌(公司网址,电话号码等)或产品类别(说明等)的其他信息?
如果答案是肯定的,那么肯定想要使用三个表。如果您不这样做,那么您将为属于同一品牌或同一类别的每件商品重复所有信息。
如果答案是否定的,那么使用三个表仍然有一个优势 - 它可以防止拼写错误或其他拼写不一致进入您的数据库。例如,它会阻止你将品牌写成&#34;可口可乐&#34;对于某些物品和可口可乐&#34;其他项目。随着数据库的增长,这些不一致变得越来越难以找到和纠正。通过让每个品牌只在其自己的表中列出一次,它将始终以相同的方式编写。
多个表的缺点是查询的SQL更复杂。这肯定是一种权衡,但如有疑问,请将其标准化为多个表格。您将了解何时通过更多经验进行去标准化会更好。
答案 2 :(得分:0)
如果您确实希望解决方案具有可扩展性,则需要立即解析和分区数据。否则,当解决方案规模扩大时,您将面临重新构建解决方案的问题。您还将面临解析和重新定位数据到新表的问题。如果您计划将Filemaker连接到外部数据源,那么您还包括SQL和MySQL标记,那么您肯定需要在结构上提升您的游戏。
在一个表中构建所有内容主要是使用Filemaker来完成Excel工作,如果你连接到SQL,MySQL等,它就不会删除它。
自联接表是一个很棒的工具。但是,它们实际上只应用于计算小数据点,不应用作报表功能的轴点或基础。随着时间的推移,它可能会失去控制,你需要保持后端的清洁。
使用摘要和子摘要报告功能来切割基于产品的数据。
对于零售和一般产品管理解决方案,无论是Filemaker / SQL /还是其他什么&#34; Brand&#34;或&#34;供应商&#34;它是自己的桌子吗?然后你会有一个&#34;产品&#34; table(匹配键为&#34;品牌ID&#34;)。
&#34;产品类别&#34;字段应该是&#34; Products&#34;中的字段。表。您可以通过构建标准值列表或基于&#34;产品类别&#34;建立值列表来管理类别值。表。第二种情况更适合长期管理。