mysql 如果“完整地址”是主标识符,你会创建一个复合主键还是一个普通主键

mmvthczy  于 2023-11-16  发布在  Mysql
关注(0)|答案(3)|浏览(130)

内容:我一直在为一个课堂作业创建一个数据库,作业没有详细的说明,而是给了我们一个叙述,让我们对数据库创建的内容做出自己的假设和解释。本质上是一个有员工和工厂的数据库。工厂使用他们的完整地址标识,并有其他几个属性。
我基本上有整个ERD建模和MYSQL代码起草的基础上我的解释的叙述,但我有零线索如何处理“完整地址”标识符。考虑到它说,这是一个“完整的地址”,我的两个主要假设是:
我创建了一个包含街道号码、道路、城市等的复合主键。
或者我创建一个varchar主键,它只是把地址作为一个字符串变量,没有什么特别的,这是我最初的想法,但我有了新的想法。

  1. CREATE table factory
  2. ( address VARCHAR(100),
  3. yearbuilt INT,
  4. PRIMARY KEY (address)
  5. );

字符串
如果我应该为这个表创建一个复合主键,那么我应该如何为MYSQL中的完整地址编写一个复合主键呢?

vbkedwbf

vbkedwbf1#

如何制作复合主键并将其作为其他表的外键:https://stackoverflow.com/a/10566463/22890637
但是这会让你在生产中变得更困难。我同意Adrian做一个自动递增的整数列。它会产生更好的结果,更容易管理数据。
如果你想通过使用复合主键来实现更快的查询,最好使用multiple columns index
这是你的决定,你做最适合你的需要。

5lwkijsr

5lwkijsr2#

如果你在其他表中也使用它作为外键,我建议你使用一个单独的列作为主键,因为引用组合键作为外键可能是一件痛苦的事情。
我也会建议让更多的空间为100个字符的地址,当数据可以在线输入的人,有可能地址是大于100个字符。
在许多数据库中,你可以使用类似于INCREMENT的东西来轻松地填充主键。

1sbrub3j

1sbrub3j3#

是否有理由强制地址是唯一的?是否要在另一个表中将其用作外键?
另一件需要考虑的事情是外国字符,NVARCHAR()也可以提供帮助。地址可能有点长,我建议255个字符。
从维护的Angular 来看,能够有一个INCREMENT也很方便。否则你必须在每次添加新值之前找到下一个值。

相关问题