Sql创建表而不使用外键

时间:2016-09-08 13:34:01

标签: mysql

考虑我们有一个sql table customers enter image description here

现在考虑iF我们有一个表,它们是两列customer_nameorders_name现在一个客户可能有多个订单(一对多关系)所以我们有一个表,我们选择customer_name作为foriegn key。但现在考虑我们有100个订单到一个customer_name所以我们必须写100次相同的customer_name。记忆的腰部。

customer_name,customer_orders表是

enter image description here
所以我想我们只能创建一个名为customer_name订单的表格,例如,如果我们有customer_name账单,那么我们可以创建一个包含账单订单名称的表格,并将所有订单写入其中,现在我们没有使用任何foriegn键,

bill's orders表是

enter image description here

我们可以为其他用户创建更多的表,以便在从主表中删除该customer_name时如何删除表。任何想法?

1 个答案:

答案 0 :(得分:2)

您可以使用代理键解决浪费空间的问题。您可以使用更紧凑的数据类型(byteint,smallint,int等)创建排序ID,而不是将巨大的字母数字字段(名称)复制到子表。在您建议为每个客户创建单独表格的方法中,您将遇到以下问题:

  • 无法在客户之间运行聚合,即,您不能简单地为不同方式切割数据的客户集合执行总计,平均值,分钟等。
  • 将每个额外客户添加到查询中的SQL会更加复杂
  • 您的数据字典将会变得越来越大,在某些时候您会遇到难以解决的主要性能问题

使用关系数据库的目的是允许用户动态地对数据进行切片和切块。您提出的方法对查询没有用处。