创建具有相同列或一个主表的数据库表

时间:2018-05-07 17:55:55

标签: web database-design

我正在构建一个拥有大型数据库的网站,有6种类型的数据,因此有6种形式将数据传递给数据库。 每个表单都有唯一的参数,6个表单中的4个具有相同的字段,字段可以包含多个数据:电子邮件,地址和电话可以在4种表单上多个。

对于第一个我想创建4个不同的表,如:store_contacts,warehouse_contacts,delivery_contacts等,以保持不同的类型分开。 所以我会有4个类似的表包含相同的字段:

id,电话,电子邮件,地址,store_id / delivery_id / etc

我已经阅读了更好的做法,创建一个包含它们的表,表格联系人:

id,type,type_id,phone,email,address

来自类似的问题:

  1. Two tables with same columns or one table with additional column?
  2. https://softwareengineering.stackexchange.com/questions/302573/one-wide-table-or-multiple-themed-tables
  3. https://dba.stackexchange.com/questions/46852/multiple-similar-tables-vs-one-master-table
  4. 但是我不确定表格是否会在以后更改,并且新字段将仅用于商店或仅用于交付。除了接触,我对其他领域也有类似的情况。

    每当我需要为某种类型提取数据或需要删除它时,使用类型进行查询会不会很舒服?当插入很多行时,它不会变得混乱吗?如果为'store'创建一个新字段,那么其他字段在该字段上是否包含NULL是可以的吗?

1 个答案:

答案 0 :(得分:0)

您可能应该阅读一些关于关系实体或面向对象 - 继承的内容,具体取决于您正在使用的范例。

例如,您可以在this

等文章中了解相关信息

通常,您应将联系人存储在单独的独占实体中,原因很多。特定于扇区的字段可以存储在每个表中,但前提是您确定在其他实体中不会使用它们。例如:warehouse_contacts将有一个虚构的员工ID字段,用于表示仓库中的员工可以参加给定的联系人。尽管如此,最好的做法是建立一个管理这些信息的第三个表。

尽管如此,如果性能问题,我的意思是,如果您的网站中有数百万条记录和数十条并且几十条同时访问,那么您的数据库可能会在更少的表中运行得更快,而不是那么规范化。但对于大多数企业和用户来说,这种情况是不太可能的。相反,这种情况在大规模和遗留系统中是一种常见的做法。

祝你好运。