将varchar用作主键的限制是什么?

时间:2017-07-10 11:55:11

标签: mysql database char primary-key varchar

我希望你们都没事,
我之前已经读过,例如我有两张桌子(汽车,颜色),每辆车有一种颜色,我可以用一个字段制作颜色表"颜色" (char主键)及其值应为("绿色","蓝色",...) 当我查询汽车表时,我将检索颜色(颜色名称不是代理id)而无需加入颜色表! 我的问题是我可以使用相同的想法与数据库有两个表(书籍,作者) 使用作者表中的作者姓名作为主键,因此当我查询书籍表时,我检索作者姓名而不加入两个表...鉴于我的书籍和作者数量非常有限(少于1000本书)
谢谢。

1 个答案:

答案 0 :(得分:1)

首先,您提到的(汽车,颜色)场景并不是一个设计良好的数据库。请考虑以下情况:

Id  Car    Color(PK)
--  ---    -----
1  Suzuki  Black 
2  Mazda   Green
3  Audi    Black
  

主键说:它应该是唯一的非空标识符。

现在,Color是您的主键吗?

同样考虑你的书,作者

Id  Author(PK)      Book
--  ------          -----
1  J.K.Rowling      Harry potter
2  Dan Brown        Inferno
3  Rudyard Kipling  Jungle book 
4  Dan Brown        The da vinci code

作者不是唯一的。

您的设计应该是:

Author
Id   Name
1    J.K.Rowling
2    Dan Brown
3    Rudyard Kipling

Books
Id    Name
1     Harry potter
2     Inferno
3     Jungle book 
4     The da vinci code

Mapped_table
Id  Author_Id  Book_Id
1   1          1
2   2          2
3   2          4
4   3          3